From 1475a13b4de8c5fb08a4d101a08aa8de5c2101d1 Mon Sep 17 00:00:00 2001 From: Max Date: Sat, 21 Feb 2026 22:22:47 -0600 Subject: [PATCH] Add sorting to main Kanban board in page.tsx - Sprint tasks in main Kanban view now sorted by updatedAt descending - Fixes issue where Done column tasks weren't sorted properly - Matches sorting in SprintBoard.tsx and BacklogView.tsx --- screenshots/main-page-with-archive.png | Bin 0 -> 30150 bytes screenshots/sprint-archive.png | Bin 0 -> 30150 bytes src/app/api/sprints/route.ts | 17 +- src/app/page.tsx | 36 +- src/app/sprints/archive/page.tsx | 453 +++++++++++++++++++++++++ 5 files changed, 491 insertions(+), 15 deletions(-) create mode 100644 screenshots/main-page-with-archive.png create mode 100644 screenshots/sprint-archive.png create mode 100644 src/app/sprints/archive/page.tsx diff --git a/screenshots/main-page-with-archive.png b/screenshots/main-page-with-archive.png new file mode 100644 index 0000000000000000000000000000000000000000..6790801b34c7659c818d5bda0a8927a775d5f965 GIT binary patch literal 30150 zcmeFZXH--9+cp}YNbfZyaRgzcDlO7gP+I6M zv_zUnS9(ndRcZ(&g|xHzuk)O<&U)T2&sp!g&U)8*@@20D?47-T`!3gY-Pe!TkBs$r z&Iz9bfj~U^fBk6&0-bsf0-cOL^9%5kDa8}7K%fgC{Xg$N4$Ik^Kb0eT*uG0{nhkv2 z(sJRSi`OtMEiD4K%xnuE-7uF|VW8-LP>u781Xl7<> zYi4135mfcs;ID`7S3p%VeO^&A_kPpUE*IiiN= zI8{~-_K&RJHQoh1F~8vl@_N}(`~z*&vP;V7rqfS=IO%!0V)0T64!0r26}+ISx~@x4 zZBBr)-$Zv=ml@~A?d|o)#h(Oul-!anD=qbzDGhdVtoVAO>h(o6kc!ONvuDdSLTsCY z+|z4KK^x{4Ha2F~Q)us&m-cI=ATP5^CqXLL2WRSJt=Ew?CnJ-0Kh=b1hX9wq@b}3l zqi?6HOkG@Dbi%_yUo8mJf6Jj>pfZ(cJZLL)s2q9&Dw?pwAPbB@eOu6!5L%o|yfw(9WH0w`9v$5Dr z5Aw2-+aM1j4UHa9bwu0)BbdE{J58J)8vIERN>$*H)^#v=4-+ULZ+nUPd$qM3Hub~x z!F+De3#j(rCtn1sZ@qzY5dHa`6{fW}BqiaSm+b<$1AFF>i%XmKA$h`Myv1Vh3};IJ&Yq5{KikIgG>qWU(nH(LXZu?wxEzzeBcQI~xg>;b$(-yyKfc@6K`2FJSR zu^St;ouslFmnjPvRsT_p7y= zLz`$Xl^UlbelO7FaU06nUsh5C?@a}IvOfb=>^2bl5u%Y_9CI}ql9Qof>w~xb#xi&J z%6uEWM>jHXj#rX8RVizEfqPAY%sbY(zj^TPSU26JevhK^*y%G}TSCf1r+mubl$n)x z{6poeuWFH=M_;rX&x=;+45s+4o?vYIFB7?PA|^!KK*8bZYOYZ_6! zeS`1qbgM~aL6X|;U?cb+(m=|m{!Y@$%8JwGv^Q!y%Hn?EkLHtluC8C{ICW)ZWhra8 zy?)j8xj-s3S$*$4O^ta!czc8lJjB@tzYm&hZFu_fyzC}`3nufYB5U)MlX;LcP8v;2 z>Kco(Se7SpG&7?@?&(K}Ai8^;B52z>R^C(17twtlLdu$vBv$e`*0ZHOszI!^w0wC* z5KaGLVM3vZbolY(gkn;vg0`@mygj)=h#&}=3q<<>G%xGU)og015Hxsj@NlS!`ghOj zK(2%Yb^aqY>)+)ntM8FB4j$5S=!-0E62i_R>GW8S$;7_CKH9a&2aIn~hxzmXmNN3p zrtY@t6fs5|Mnhitj3j``?Tg)pzAY?lgw^{ra_FPUuWlDko$q zo!tC38^xL8e~=%(GfulBH$9!{2_6+jvDkB2&3Cr?-!eq~{%GAoCtI6&8R=K^(4{lr zRDAtspD{H*jje&K%0 zb`88JX&VW{yDOVYKGY)Y%>ML;9QAd3dHjbK5NPcg?Opsi?_vHOO=fl7#_cCX^L)_R zqRy@ASzhw}sq!Ip&fe(Ikpl_aGUvZ`@_{&<(u|vPBt7UjGY5z08-JtJbDye-59;GQ@%wQJs3-g6vgvst23<7f`m= zaaIRy&d7k@DSHlSd>(vvM-%*)p`rI=LvSvv=wYt^a3)qkT}UG}&t3 zy_a(Z=r(fT3jM2Y`Qd*=en-16IVWkTS+iUbq_&XPijh07c>HL(gT?}vFN=qa2@#W} zL=!}nDRs39XE#T(_RC7K+Ad4qqbTm;F-UFZx2u&$NbmEa;7hHj81|OJpbYaZQOwkHLm4FS3eOO zooVDy@Kwrk))>rC+XHB%B!EIzUEhHm;jDRD*yep!CuzPVxKzD@n3kFpu~Cg2j}&7O z0u>?-e%7ppctV?>&K%g(Q;NK4aN*I}!QS%}5h`p&~Jc9K)a2Q;ov;X<9q7`U9SsMo;;~7H zABFw}X=%$dAKbJPg|#avrYim@`^b<%cLT_L7S3IHxQ(zuxCdI8{2c&I;`NG3jK7rf+K-e$$eTN#3{$ zaWc^I3tFEe(wzBV%-#>}e09%yYdShU4h$st%~iwarAMmaEy@y?Acj(o9=z&)q?43c z$$tlJD|hA5;*tfIc@8Jre1=W^Gj9zVCO>t-budc=l3&~@4B1vjvfDS5Y?8oiRmM)+ zrhkv9Fv7&pkjE006tAeIB&EDk17W+!&)Qt6-C?gK7Uc))@1BJ364xXUOr6|UC%Jq~ z`PDX9?^CVK&Tjl9Uq1qBfGe? z%d-*1r`@z_K$-IHnNj7xbjgEv^eXu2_$j?2<6P4~Um)HdJjiq0_xx5cd>S%WkPNX> zVsAn#rrcw_Hy(Z)8fx97h}6{FootA?jgHjz@QQ3@AQcCMP-$s(OT35B=9*Qx^igB= z&j2tcF8m#vC#vbQSf!{Jv(!eJQ_pkg$e;R-!kU1qUS`euDBaf9E~hxOkeWMZ z#1FsPN#ulWoDysHh68|aybG-i5x#l(W-@Zl9~l`51XqmM4cau?y1K@7u9gvMY-CF< z(GAXXr)683o5Unf-InO$26-`$^Sk<~%MMAQO$E$LP{6}`pn0$j{Ov$5*Y_1*8jkmc1}VO2M{WYRmh(-6;Z|} zITbDRW8_aZuBWm>m@TcjROj5e*0Rd9mJ695 z#}UGN+S@mZ5BfYw_JJ(IQs^tAq9LxVXw7h{_JfKhb^{ecqhv`=ve#3x;tPHJh{>K4 zTfPv>n{t2hh&-E2Sdyr(RUs-kMD#Y1bNTWY22~ww_S-v^^XE^3y!LWF{_;D^F_K;m z1hn>m5ILK%RqsiwU#(kLa)k!YdwbgTN(tt&vTKdAZu|GG!XvteW6oGY5x+)4#U!9i z1_Zaa_@*j7nq=Jhm5ka{$i5q_8xdhk6J+@5H&)~}5LVtS+Pc-Cas8F8GR#f{GwP2& z^u+vsr&+iSsk`Ov0tGGsC?aj1m^F4!lJ>?M6>r;^rQ7G2I~}z*P4e)SBv)mVXGZnI zW@ohz2Mo!>qC!U_*~m6>pDjvo{&uWyG?@7_o(f^gVY_d44P@VWdhm`s-yG~Qg87k^ zT3f3m!5W58r{Fz667Ii3;h6!nZ&HS+{J_=MWEd2=)TZGUpO%q+s;sl8w+MRB%k`jh z<)ub0TWXX?>ksEJVAI!eu>XX=-{AG5qZ> zi8>ct)~(xt6LXTu+GVS@=}R{s;@4g*2?8t^C#0L0r`;U#oS?#_5e=GDesA06 zEOG%)9JOhP?6#7e2)?H4~i%%x2~h$q_p%t}>U9kjd3c4B@n7*Zp3$a*3#c!>!zcQ%xU*ziF&RE#HVr9PBb zV=HZ!<+1IaTJ(_MOmOZr>LNgTm3CbHQM;1jc9blu{PK#q% zD}3OC$IO={`3Sbf;GvPqKdr4VA0%tAK3U;Q)!9!cwwl~>VbkLPrE_zgk~!`Hf-H6x z5t>*LzDVrYt#&FdZEN%t2Jk3d&_PHdbaTf2TU2Au@bq+*CAG4)b3T5u`u6#@qoWo( zUmR!5U1?+Be7+a$@*)&K(tY_AZJ#J6hx1gh`tm=cs$0WCps8FJeg4?5h&KEP)`8;K0( zY5Rr`#epVFQZ36@P4b077vRSt+oIqZ(ai!ppsxM61PE_J3U`l3bpLrM@+Ic6nOVf{ z#iH(>P4;76U}pCM=msi<8yg!`Jm(%Dzd`*J|f`KWsgO&pqoIjr%??cjy`4Do<(Bug5nF-ZKS;FgQ;H;71(WO= zJ+0nAFYtag&bo>?1(`U4XlYAIUMCA0?3TEfR2Onso-}d`>0iKtJ(9alS>gzAefe5& zKlO9>sZ;HzYdU>ehI3TB+vn7Ym}`oa=(-!CL8P|n9mWoXnEiu@36Ia{$qo6M#}HF{ zz8hla+vpH$oGYEcT8&m38ggjb`_h>_LtS_vqT-|F`SqZ*uP-Zj0zuPo^=Z(-v3Rx7 z?zO9MF5ZD}-?EgQZ37JY+Vw=?-{0y{#V~+qOaFL^dt+-mL~}cG_ifKk0}1GtMw$1j zo0~m~=BXOApU#bh@X4(ho+6XXOZg3}x+3?Uhi#~@xv4(?UgS#jb0f7idsZ}v^$VlF0j0ONr-y_M+nn4QQ{^ba0L(VH%iP>(IgK9 z0%iARq|#^Cdd;nx*@fH?#3F=G&Y=e5NzJoJzv49i6Y{*QN20Z|=Hucwev@;7y_4p}S7MkfuA}qH1ajoJpCNCewS@j5 ziItO4=p7jH7%6m*9PRDxmA7k5OitEZIaujO;Sr;UVl6@1N6Vu-nDv<5YGAgAyF7Uu z#ZV-@n-w~bFV;_uufXg9_n>dc7;=#TW)InoUdkcM#n+0(RXv_DlEju`!=mxwOXK0S zZt{*8ztypl+~y#Mo|_XYwdlG!4CdAVPm`==bktT%Vl!onzE^7^ARsW5uf!Oo;)O7W z3p1NSb@P-;oLW$OYtxF0OX}BT9+a1Q*lu=Z>(!9VblCt$kt5~?{p_JnU1{lE2t?6d zd`RwFe_3rTAZ#dVv6kaj`aeIsnvcq!#hRn)wNa-Ng+tbV>>mn3&xay5y3Y1zDEQ1) zJA*)96u$w@c+7VPZIe7lC1sS`NrW?dxx~T`l#;>rfmSpX#Lz${i_4p};+B6f8&GEY zH7@Z#v;Z5W&m5A|IDyS^N~YzN1y>LTRJ>P6-_9eSFhIHJ#z`o-i*S+Lc>aIgR8!7 zgzoV@{Q z>EKnbmQiC9$lYbECYud}Vmd1Ql*m|$4tKV)r?_FQ&zu5mC;h6S!C!w(1(V>P9|}Y3kB)>7ZQrKy ztGu-=%ilVBrxX~H-LQRENvU&wHaxj)ksGDpnAY;ETQZy)PZ;p|ej7aHv*uu1=WzuD z+T9QQ7Z)g49@_kDugkwEC(y?%AiyA?54}Db3#NzVs+&t2Gg%gsXzRD;rl!@;@vXyP z_7h@jc>C$QzLc%-KvxbiOXOy<1hvCF84@(?(32msYB}p8VQ4I_z7?+srdLsxt@4no z-}sH2wq|gbuLuY%uR$ma@XGV>oqv{$FH0bM!F0uuocDEIEN_5pY?PB@(PDeb?C_r_?j{4V`pz~Z)+C7ao`kJ zoC_hWy{M{{qm$@&K_F)2rAy{am$OgIzc+YNb9h*~8nP|--Sz#$!^3k|rg?<({Ejk{ z!G6#`{`eyxU~fSz)MvW+@Bs%aJN15KWW=!Fz|;8X+qZ$=WMph+tFJo6>l^9I$T10A zs2fFvT~A+2bxXBJoRPKyK4|j8$(xdrwZ+9hk*EV&<-tM1uAA9DU504>5Ar5=)en!6 z(sAax`AN{n;bVkraUbE>)^Atmk)D!e`Plj@PC?g2N5^re@5zI*)YEb2xF_zYd+`VF z{TXgEeY6@ko*E_b)LY^N@T`v+pPNsBcH@DGA+6ojI9nxjVt~L|AC4DP_{+!yihb5w z_8^}J1X|!E1LGDxOA8D2gOVPA;@-Wh#LayU2w58ErXOfm(!$EBOauh-x&Z(K5a`<8 z|3-%isf?VotPF94NrF`O(`wKH3K*3F+Kj15h0cVwg&Bet)&LB z0iZ`#0HpB*CZXo4FA^V_1sKqNxdQqkEZTnJcZcfbSXe58PTr;7 zV0xcLx^)n8KnQUn_hVaKptKQIkmbKTvXY}Cd#EnYT)B2T>4QYK^moe-azVxYGQWYw zt{57WhMwOX_T`0?-M~Eoq1$mhz&E^mXYIK)T*$nN2&CCaePzBp@d))_#d^m;&P(lN z!_V<%ms$`4Gd5PIFyG7t`jY&sALvUXWyWPzlM@lXJ36=9v!4WcihBXg%xhECJRAt@ zs7xJJTiY#2ns;px<9DuJ;M$ldSi2r80X(`Tsm*;|sD)JT3j(2EnLh?C*iG9AdE2S- zA+q=pfiCx*Outk<^zg8i6Mzw$ikzzpbrVJSrUJ?uyk~jgloE-$6tXieQ#nxAU0=VA zs`C8%dn*!{)W!nVYfNte^nz5qv~WUNvm8FU8rsulBG+#t1jRCv?DG8=KX}_U z<|rYZf-Mf0-D`bm4Axpc;$YJGCYHTZRNd7TOKRSsPBND|YLn(`2(G?JT6a`(8|JPe zwOG~47 zT1)GKgmb9S^{EP*QC;FS!1rKMSwWqPaGBEd!R{01LuXt$Z6W7r!9PdJ89+mHnm>cQ zNP+zPzIB?%F_Jy)ZeFw%`sF^4NX60N6pV8+)!a;iKFsRGF>9jmXuEN7eTrblv#wnWdFSscQ4ER%4L|D}O?Uoc zX%|fTA!~oN;zJ;+qGboWX4Q$K?ZprO0-`DV1C0yaU(zFbFd`xWRzDc@V-|^!5bM>m zp~70b+kCjITE(QPv*r+1z+()v2}RIee6Rg^=w0n#iG7_s=v9w6H@WrwNsy5!lO>AohwXRjnc1~3T?|ca0DjPGw1K-{{#e|WY zinzJ=dXj|N217KX)dA>MN13s0bXN`N+MSzACt5}JF23UK93RR7%UkCTH_Ri71oPk? z_&Ez)aANko?P*wTiTTY}OX#hwMnahPYJ&R-5VH>`Syc+~h+sJRkZ*A*Wu%6j`q>xX zVs}+-Z|~eYQ~HtxC>=o$&DdSAkowYJ*N1NuxaPW;ffAnVo;jASA0n&K)y^2bx%-8%Vj zrvHV~C+n&x&5W9m-9Z)LynU&47m zbGmR=^i@?+`0EkkiiQJt#vPuQ3ve&N@%c&5^%Da=Z_3jt(u&%#hbw1Mv z`$XrL%v?~1aav04C5 zrQCLIf46qs-90mN-7PoBS~p_ml+~Q*F0@}@kdIb5R##^&2VgRcM^0A6z}X@oY-(Lx zR;sO^j(#5G(_sEnBn}74!Kr$Ql*@*F-v$Qy`^(@Fh5-f!fQ@MIzC_vTGndts)p7Mx ztCLSoViyPV!OEa(M*v~~5h`m+OGD<*c;kXOCOFYt6co@Y45OqBt?v1xiG8t6%Sanb z$X4;p%gW2hM_B=KCmxM1MpvMJlaa63e*+NM*48-c<{OAxT#$c& zHdEXQ0N7p0l@&pRw(B1tNZ+1|VMisPF#Y~tMv#CffK~wrC7i^v-%iqq%+=l6Qr6v5 zAb&vP47NzK8cUFs{q2|k^otDCWJ3J8{r_}Edd6h{iud%aeEQU+4$w3MS=q8*Xka2q zpEi4mJrs>oKf%;0EiE;Oj|aMlf}qf;_s8G<@g;L$>ohrg#pTnAIv)LtNc`eUW|jZH zK)Vh}$LwC})T=8=ATAX!(a>D~L#HaJIQG~P1Qgx93`NBu#bR}Sxrq%Y0bx)){k|Cn332bP*n)< zxSN--xwn2B<_3YDECKKw`226`)39KASSWAvNkDapP8MVm6er}V{c~D1gwgQ=2BYR zUR+b)nv|5(r%y!!0s!0qF}IF&;deKUvh9&e^@1!)D1VQM*BpinW^9Wc>nnhJ^huQa z1lrvK@MhW6c9MBDy>YA2KpGVmS_8{2k`aKA>NZ)FuM@9scxeH5&Bd zr|0)VcmMnMtB9ho#j|TUFp9Wcuyh-n7*4*hi&IECk~xkj)*uNWx!m^TCW zPvm#{JJAwg#Mp-b{&E1y7?ASe|HA|LrT_>_KtYq?+uO;2{I6mO)Yd1?rjM-eIqe;& z?+d(&s>q!QCXG~E^t-lybs{c)+Fw-!h8t7Xz?U&OvNG~8R&H{SQI19x!BuRg-oVgk z&?b|yC_-{`DU=BR1}>551+oimE_XfS3NS6<$+{=6a0?i*7no?3cxLMoG`C+(;(kRVgV`$L;DD{AVJv0K&^I~v zcD+%VK%$89841lmN-K)Mye6x(&(_O_v9?W~R$F5}__YuR08GZaZCg}$BUY9^E5=vn zJ9+fB2+At~hV8sm5Sx9)5Cun$jAe$?Pucl4>9oOWR{7RChp`a>KSdOArxsRVGFlhZ;5)vBT zUvpH-v)tTVPJa>ptoRLn^g}O-=eoA6EK^dIcvV7d?0M zbI+0x_vFwJO<&cYOr<36scW*u6+?rvv^7>T5R&ifX0_d#Bv>m) zppAFN4dnzy25vg=DcaW^U^=OMus&H|1hCbu3IXIOqL7_U{Y_pz8|-QE;!OXsSD4G| zM+<<&6GOr3N8jOG2it8n!xcqh$e+^CNHJ_1v?oG0K^(_0o&^k5iASzauj(a%gGfo+ zvjaIw5E%hOfCm2c*BJ>%3k%lFtVDj~K)ZHJurLs=6g$4FcRcKAQx7Nv@0kI0{+lL9 z)^>6-fVI22qJbvIJ*0uyeUA{EZ3HvFv}FL#Z<8rVcoeRq6E-Q39n9x!@W&tD8%>gL zzxSHc9vy7p=`=~+GfRe;m>F10gLcV9N}3gc{qx-e>b%b; zo5-&o#F-x*9gRu6nwpmpF?W$GXlH8Y3mlk7)Gu-6BP{mcNb=!5XUmVaG20nLX2L-o ze=@iVkSSVrs)A`_0Ct#2_B<9drKGwWgsbTP{8(xZ_JJTq4io^}2zW$=w>Gz+{Cvd1YWv0mNRpc0u(*R}dPYX0=V*=VA6IV*$l2D< zRQ5c)s_O570Sr$$0CS9u+CmSUq|DIsV)NGV_0A-5hsAx_-(>ZYbMJ+8q&1Z(ayLKK z@fjUoi@I_1W(@rrb`40UzP^EfhJAmad#&n!)d?7BmeEVs_~E2qkJzzNNKock!*C%0o6a3i_uMnrxu4X^Dh?enFUhNreNUjo`d z-B=pX{YXndYe2MmH*Qc5f1U-{wv*A-?~PWN8GZ{9p&)Vv3{Kd~biedFQjayyku zH2NIuPwNwlhPL(AhjbYygKvZVz9Yr=BYB8+tSJv7Q>;kFGkbc!l8aum)|3?bGJIf!A@D${=v4+=2R-?<3|g~-*sbS8p#Hg z<1)Z(eUp_rh98@uo&&vzP5+suA0l&i(K1R6x<0F!88hj{ZR@? zm$SaWvS`%!<9#*c$)(Vp212 z$%00(SQ$XY_IM|Te`ut?(_)jn21OKMFomtHi_<9lxd*>9{SwCAY94Z<6m2s2!G*3o z<#x(Y%yW0OsoH347Ep?B&=^6%(kx|NKzm~6eg7G^W9=yTycuQ$OH`g$Qi$w}bng)KHs z#%j^cXrpKH*)KQxqYx5N)aCO*Op#e5w!PbiA_TN z5vk*XduUTLTfm=W8hCwJxGDTp8CbnO129`4nT)r7t9N3zXRm3Nxz;N$&Ghxl?wva) zqB`J6mHI8fa#`j18w-BD33DBnm2f167#BYT><|gJR;a1H>q)SCY=5cZ_6iOqXcK61 z?p*v*EUYU%BmIgX>MNgD$wkX-KmFXz2oPj!R?=0XVKT2h=6j(<8GW?qH0aNKK-r;@ zJE*(EZA@d1e8hN(Nc)Dl`pY9QyTEuJNbK(YR;8q4I97>W-vOGss?XRHo1s2HlD&QJ zhSa$H<=$R>qsgg>tSod-PW{;^Lk|N3z=0Od~qb8-Ot zl34Gr>;bd4%C=|fw5SKpFY|AnKLNx~&k5Les~>rU`Lg4-NuB%nF>5*e_Ylf^x-vB1 z(P2{S?24YDzJ3xC-^W1}T5mOMDjJy>0t&}J!pGN@0Y0+s=8Vw7A@`eredE>tXr6IA zvmjWQ**~^*6asmr8T9|wfhqxku!aDMub>C6E(@lg0*QQT{a6DG-~Ug%8k{JkT=O0S zaEx15E~64f$-%%iqyT<7X`T#LaR(eYPYUk2;QQRfVRAsR1w1#!WglCa6?VS#u;m00 zu-6HDZ=OAg1IBE}SFDbaMuBjY8|EG++;64e&6Q z%P2V;n|qOqAG0f3oH{2G0dMbA^o{?gqsi;JzP^4>PLLVr?~}6)zWG^s7mv@5ix(Kk zRod8mYr-qE7nqYd@_$Fk@kTvbCg3gl4DhI_XE*-6^Zw%h)XmcGBfRJSLksvXUl`C6 zKwos-Yn?eG#rjV>$QI0 zYdF}p?Qry>j( zMS!iFC;oi&R8GBCXU&wFXXA*ui!Hnt>c6}H{5v9EcfMifp6%~C?!+oPUU{49_xjZK zlf&@m?Yn}%#qIwBD%Jr)6fq3hXL3J)p6AlsZXF$;bU0iQ?BqUo?q%Zd!NDL?6vX!r zcYG-C{kTtsR5eZYM8NAataETPsn50h)PDw$>uTEmxuzLEAEN5!T8NN;4X~+`paHxBe7Qz zf0=`81pexI%eJYz(Tqa&?vF7P+tM*@7PDz77OGipx+cHBnv}b@NQlcA6bfQX^5-{c zAlZd}2;At-dDKHVJ;QI#t2Wn;PviNPBr1BzxF!Eb#P{~sGVX@DxGOs*!4@u&ZkJw0 zm-g)`FmhD4$B}Z(jqVH5+f~ zHi5Y|J?fweVe4zQZy5PdFh-00JrA~h5!dLy^cBS+j}+x07um5pVy*KFe)^=r2tv?4 zG*9U0pgeSL1p9!2WgX!oX9=SM9J(?Hu>GFGE}(Bte+nJ4Fk z4+)VUCHPH8c!Bp_|Z#>@-Hb&yENvK;Jbuj+`)jmTaNIT&r;`w;3h0L%j~=* z@s^++>13)Fv((Z~9CMTueOj#HCu|1rVc=-4-*kv|_t$uA?rfJ0`%KA(PW;>*ww`0l{sVzuJhU@(3enk0FaP=R3Zrp2?@a1(HpCikAg-X9(l5B!U=AsWV=M>;tpa9En{JCkhm}+G#afiXOKy9CK)-#KUvLVewZ7j9+w~@Zc zLl}Mk=D*6464X4|RclK{9}{3(e6yVO`Biv`!@Z5e#g)KLss5Xhb*sGSckJ=#q6)xn zddqz*ykEsm0@#SNONVONDP5n7C{T!6<%3l?#bQ@ZsS}wSeQ`DvY#ezb z`y^Mz(Zgs2ivibO-1Ms=onYV@B*xlcZetjEv4wLNSU<@{%{0B2F0TvaA+x6TjGC5t=r$hKCrL;uaeIWZ8kvaV_&@3W^ zxw`nnw~K2{gC`p_~q+KvyEc4hgv$dxOE z)$Hf3-Eg~?0P&-zDRyLBL}P2*ced^{1%6f8X|OQ!aJAeNS09aWYuFGl94wyhWzzX& zEka>uv&t)Tf=@VUIaEZsy+W5(>g2w*G;;bnU{yJ zaG0G|a_dpm05)Hs(depoUB1A;>K6Ft$ftgEX6-LikL5%-_ut8PRMI|4r6>tM&JdWG zv%8qYe+l5fn_8t|(>b4(AU{KA9K0LU(Zgqv*^G65fXD87BjuE9hdNV7Mg9f({g2@B zQcv$XVGO4Mg%hsuo6w{VF_`O5f<4f;h9ua@l50q^S0hVtW;JwJ%1wn=FbT%2c|B}D z9~nR2h}+1G5wi-8OCQCZbJo+{H+EV*6V=_9Ss)xdU+PrE)-iNTUs2?CHVVd6)+^+g zn%X`#_hUCooPA9^D*Me~bH2Z@4jtE#PT&8^1$rcLywXN__g30M2@={K4-p7NWbdJ> zqiV!~YEf>`5!AOed?n5o0{V!q+p5sq0q=a{?;u~Xau7#ATf@ldC}=QXt|e71QS`(D z|HLep5haffNwbwu+#TQ_3uyTp%!X{A_L)W!U!Ib+M9V2CIAXnQ;spkmJUxGW)NyxT zPm${1*cnKZaaua_gg;#q=H=R70ko<=roAI#Oy582eyQvhv+}FkhM-M(^Kc}CFzVPQ zZ+|HyiW$ydGjo8>Or8I1wUbj_wo{5elX`y_UNcMS%g1dzMpZBz)KQ{aJ-jk=% z8X_)i=BcF~BVf{@Usam^a0pNgLm1wAiJ}fRHh27)U7g8lTbq^Gq)K9~Nvs%h(Vuv- z^Drl@?`&r*Pi1j2jQ&LtcNM!$iP8+-xtbJ;cUc3e$T!vMTBKbLn&m7;Tjc*bt0pQZ zOrOabHLJ;1*_!eN3i;>OgT^YwF*!cz&>7aifvecd=;)AHiR=kXF!RfsR`sQt*+XN4 z{&N#F>y-gZhfae_XzZEi`-7oSt)syw->fB^c5j_4du;RLngj&ZzO9IUh(co2k6H#*0-BVTkp*U*>+kQ!F*7)8h(JoW}U_d z?18tzC^<>3hfk$D?cK7!>pZxI2^$lUXOQLr%tiz^ibeiu5K^1fG9uhK&Fr%CP(1Ns z#{Svm7l(&i=EL}~eI7#r#Y`b_G(-TK{>Kxb8>P7%5CvMokr6`kM5>IVS__-IaZ(?05S=-lU;#Mj<(WT)oy8 zZ<*9gLNBiDchJ?%!HU+mU3xaby}9JWZ?K`_w$i?ljzN=VdGABFw1*KpGgn4qVxuyB zIW5#5lfiQubHvCXLI$=tECWPe~7JU}{=O0yNhsNaV}jClK4o2EUlJl3eJ$~v zuW^+K0hV&L2MxqQqWqEHYCe?VheeHzqCPmaK*uu5`<^K&w1u+jjX9r0tEoS*jru1dBmd}Q0&4wsU&p$n)oM;Kym_8<9h1dI%#0ReZYMD}c zt+*I*G+$An04x7h>_b&JS@EM>mtfr!>Fnat`&j)QAM)ODbO{Y)en`?GK(RP3CLDpu zr>chvZBf$$d|I>AUHjirohNi3m=k4DfJE~O&?3|i)^*6At>@yKGu}|jiPy!|RBmbK z-v818^8I;r)>lwq2W8;m_=s2Z1ZWB5`AZ8CTC(05rpuzHi4)(#Udm_k^v7O!9b+Zltt6?!1Tbm3AJ? zI5IrTy-nQS3qbZMF>p~b>9q-!{f|KM+GV}}2M~Kc*cH!%2>Z*sk_hoT(nIoXFsYX&h+jHztR{2D3Et7olzBC)Cu#VwRF<5`HXg{8@Ap~C)7X0*fOsJ zP5lW1iy1~MZF~5AZ$N`s;i>%mT#)|5u8%M%odV1o@+%jkOPcaATB}JcRwE)sC;34~ z!&D}D{HuZ|)*6l@vv*^d!&XxakSDKPScVM}-LeKJILxHo*TpV&kb=5Xwmf?jAdq+Z zyctJU^gIeP(TM^e+;+C-nHv@sA;#*o{`|Yu>W-S4NLq>jM?9bxXWqy1dn$UQ z2k@phaIK-rwzVg3>AN?-1;{p+-ZA4hf@p8Wp?!OzE#^xU?O$)N3wl1I(N)+~7p26D z`zBa4fO6R+hyn(vpvJ*7FB1EodA)}XMyk|u?B1RLkW}=m1Eu##rF6fn?nE>r*vxP7 z>s(`r8G!a~S_<29K2_r^1sZn4q+Z!yWv(VkH;Y6jsVT|J`;DxGratW3VUM}EwKkRB z6w-fbBdI?nI*zW^hy8{Fb7vxlp!)Bxhn7!m zvl2??%UpZZSRh5(lW!cFVeO6^uMnb9`-wgPlPAY@4vsZ{Y?a)~N?J-*^K~A&)ab>0 zHNvRfBxM0|ug_Qg>Sr?}PWM6^b~ZgZu>Xp2yA+z<4|0S+e<>*-l$TJr5r=JpTlxHM z1n2VHvj;h83UkHxQo^9!3Z&N%zd0R=ptNZ0ZhY|f2_eIO057D zej`7skqt1>yKm0|BNXB!K)!9)9s}C#$|b-~5Zn_UW_(5UTW@0$FfPHUW7Yv?4DYo0 zTEyl)`5edQ_}{yti5_}>9^f>4a!n9+4Fru+eduFE%4jRu@P5?oa_s8n;CzRDX=_)o zZ6M=5fTCS}!uCL*BwJcgxh{P6m8|`qI^d_GdS{)Ple0m{h9Bc=q!n>T@~kR4Q3Zrw z44BTG+7sPRW2b&xW>EXyoA?&GdMvnnjKBSGYk#mnEo)97h{%3??zcRTGF+h6+0&;3 z;;9uQUd#2l%35x1>%;aDVpcw$m7b?RIIVaWsjnP6RHx>`93mr#SvfhbxN-j>mue+4 z(QW~77dQ`QQhMQC<9@juN9z~3j1qnEo1f&i9MoRf^@zw}#r6-u)s;QMGl`j@Asu$h=Qe2*2 zN6fhIXX(sPmYh?$b)v)x4D$OWbg0WIYu{U6l2P+D+?9AD z>Vei;b5n4?v_|#PzJAg?D(IJuJ@8cD)z>(zmg|pP+B4|m5rGT{PdUHpg1Mu*{{Xx_c3;30t_KigCnwYY(EI@@$r`f58%6MUL-uAvW4xxyk+ z-T;zn zoIRThwq=b8Q!(u2wS#2RRVucCA$t`L%&Ly!Fe|>ScW=LcKgX2G0Rkkqp9pqFq0?SU zg$?yIfb3=f$3U09%m#SoSb=YQJANBB*d?i~NoFSQ2GV{ESOO|2bvEsDCMw$V%>q(b zj=$A-bSj{0C$5f`M0yTn^h{o2BdW;n^EzHG-PQ&?gwvet)z#G?664`9*dD=ff}d;M zMtx^f$S9(pRs^>vem4U&yR}Jx?rZ7$vn@?9$mh=a+Z>Jty&N zwj-TUprlL@>s)N#S0=0GF?P;c2ynEf1_|>(J7+RjT!qqDCqf@~!|;_?#OjS!>h4X-B=GJU-iBU=3n&Fqzps`CvitBQqhxhAUIKOy4b2V;c6R)XzWv+7zn zl>v8}#ed!nd9ME$7;Y9h?u6Z^XxxQ&B#-A^$5|^DrKM@h#{n`pq%IFM=IG{WV@u(E zxXK@yWW-RR?z zkHv;~#r*s0MAanO{6CNR*-rh)0=z(GQ0y_tZ<1syjlbn)?yHpnYb@9E7oJXavzBoF zoyk`jEb&Z*OE1B#0x@MpR?k0tm^;Dg+3Y?ggeak^gC->@XJtc{o7B4ZlC)Lja(6|d z6qy)0PpqHe##snKwl;ySLPnd&5;iPE-yslAIRh6Rczjr4rG*Yrlis-K15FNh!PZWlzOg*>A32H^Tv& z7$D7jrmJ~xYuyGIcCbDHOQ+4|UeB5>L(J*c6eNYT&6ClvSHtl&%dDK>OQzbh%^`xq zbZSM5pAG`*yZT1FfVlEwCUV4$MywT8rE}0U`{IX2tjFU7f1RzNbZx&yP1N@vqlitk z<0Z#RWas!0YIz{Zvqu(4){vJq?6`w?*vpqt47R*@ZsZpbdB_(u?5N+;h9i-y?<|7N z;QS)B>%mfDGN(^VBfoOM&hD`6pL=XSO(3clni%@JQ*UF=yu__%x#9Q7Hb+PE?-wf^ ztVP=gY~t+1wpLr}>X@afrd69N8qoF0CJ{T<==bm6kzMCorHSM8QM>g~;{xv5hJZ9` zGA@|^nP8HJr(f6R{9bW&R^ytoYfsMX&dW=-=Ykse=Iw^^0(!CZ@oHxQevh(QY6Zz_ z?jzg@4!37k3j#lmB||^I0geD=5HQYx`>E%8wx_EUhiLoJ-ve-+?|_GTVDWQp!%i4R zheW_GcL!VTn=9D6KTtC}&u$_%8M(R=rK|NlMQB2IhSICD&6Wm|*@_WVF6eF|d!V|d zrKMYseJe^z4B?M)KTZAJ`|Zh<7PtTYy|#Dp(a zuk;-@13n<=&Enb1Qeqb#Zt%ed%f(}3Eh@O|$PdPGK>pMhc#=$N8yVmSMC~S?B-FE_ zpy6;UpV5m;Hcm)(b*?h;wS-_;doWvSuXk8bJ<9GFFaiQe=FQmn&J;cW?}NEr%pU{k zqmLf5aX||S%%^FMPk`hyK0ZEVW^vJCO6KM9*rVKV!GNj&V8|hwAnGw%Rz;1pwJNYa zXwLxv`zL`FSPQ(|efWZYS7&EuN5@T{pg5)5sVOOv1^J}$T>@HK?d@0E2QZU_ifgnH zVWnFD&tDGbIU?E%Q6|0rkqaluU?Xtnzk)Gl_^&rec(#$ znzF8nM35efY?rh#=3LzX+^;k|`k0j7Zd1J(07tz+j#YZ4H(LYKv6YxxU;&GQE>x=M zbEmT?hD3D=?=0_mW6kwD%b_)h&)5n}`eS)3W3o*n7&qM$Doy=Xw$@cmQ48Wcf!h00 z`9x9}05{fWkHxg6B0Eq8Q#fv=jx4-I6&N4p(fL32HTbyi+k z$y^HJC|LV;v_y?Xpge}kfGqs-zc}2u?+Stc`4L;vHV6SZDd*JUryPN}xPJ7;SLq6Iw-U!eFeXvnAd2uU`{U-OstG?3DgYuy zz1Xwy0SvpiCC8-+0n{#&z#9%|igJORoEIu&ONw6VE;PjHsp_WBrPzfo!nQcz?Ee6Ih5YgD2#Xbe>Pv{^4Pp z2D4>~kBUcCzm$U296#uuCxG+{5jQk6+`<(Q?lH#wZx%lsPLI-CTUS;26c2ZD;%sE* z`jcF$SuEDWo=R4f29J>%BLtm(vpi=cD=BIGa&~?ehwb_TJTADE>{NdeTMi7`6Filg zJH)ZDk}*-SvDnXU6y!3Oo6PL|sYgSl2==UkQ3O%nT>`y?Z64=tnPqiJaD@>oBcyCKH6+p!uOlAc-v8u}&R@w@OxwJC71Y zRO}9s+{ZGe3`COG8U^v8AMXs_E{ATEPAK0jWvSHZy5Kr~FnBOZ9DdK9M_aqtE*#+K2 z-K;$KQqo2KV|)C3-sbXA1UKD;5+KbVCRq5q_q1 zN=HXW1wWaJmL_lr3W*wSgf-LA&bJrQET$0|P^vA;!1#S6-3EfQdj4~$j!MLMb@QDf zW+#BatqJ#rS(}1QUf{9S=lob(8m|uA8jf$pAx%L=kTrP^hz$_t`3v8A#nnGYMzy!K z!y+YaU%iSP{vg7l&IPHv4^4i9-ddh+_xwcDbKnxW-ZLKh$M_&jo4;xzsy7HP4%a>p z8uwl++uRIkl|auGR3o7DB(qv3rSoEM8Hp*A8fH8(Dc_JkW~v9al`9wv=mMO3YE^1CezGnLd|Ueki{H=!PN0noao+x zVl0u~W2*rJ+ay)@B9I}v%YaiAe&G$K<&q>#FIPa31G1{0;lqCc9}A#*RNoE!zIMN` z>)#RhXxT{>v$7X5B*VltLXw_`6@SZ+X`S7{f&jn#02dcX{h3REnD;x-3w?@?*$El2 zWfp^%7##Y`M_>J*)9IG;FeDheptwyDkIlym7QojZfLM74gsg-aR#f1|lKP(L> z4=W3g>*?q~9Q5v~eO6ZPz~^|sHh*OD6jWW1Yio~axnm?R4=Nt1y>Uk7jPUF%AH@AE zkD%CA9I{p-b`e3av2ei>^1i>NqMDkF17-ECZbuY|#0FHGopcj?ZZ>0-XMzI~5OfMrSH7v6gq z^i+Xh`h8kWO>s>Pco_pB=PZ!@?+*3^uHuSXTJl;|1VT<_;k$Dh8h?KgL))RdM)JV$ zU}52l{729L;B^mbfQU9vPC-FMK?$(y6_j(n1?*7&hfL}JU-has3ZJ$zLU)40GC&;mp#*k=HdRq#-iu_jaZ$zTUa#FaHA`(RvLw^8IXAr63Qvo33@nbG>D|oAO9OWk zQdn@CFOuN&VAMS8c8k~Z8O!SN$TT^l>6>g1n>d5>cnKG6sxREY+{Ah9o4Gs?4@2sy zR2gKct>afgujq9&Tl@ar(5AID*??4$?tTrK?hh{7$JQAPp|%Szi_I(a#GM`E+<3{T zdg||9+nVlXi8s*f1Fc?lP`R+-7}FNZbOsJ;`X zkWV)3M{Go^Y3rc9V@g-jw0$HbCFe@KwcAr8rfsA^ISAt9i)douKBDQx9~R?F@A6i0 zTvo4coi8q1x(YZejFSDe$7K?`@J9x`c*S!)WRa!cT)zqh6DPzXo@HfaIqvLE-DjIW zKq6hTFj+nM=EEo6`SS`x>R&haH@sVXAYh}etD_?*-d>#7e?>bb@Q_KCDlC_GFokBv zyJ&V!|6<5h{lJDwHZ8rEXM%AOhT(4#UUkqaUM7ZyzaHc_`s`yuCQ* zY;=Z&89;I%kb)wc$@`(E)jnP;;f1R6^CBsxS*g2tN7W|d(hkAi4}RPV=A^@-;>PF$ zw!n0aCZw#QVrHseXVmJ3XZMJEvNnSSq?L?hN`@&vejv3)%`)HbiM-CcFyZIZbT4b; zitGEfTn@oxWrgC$EMt3fp@H-ML9}2Yeas37LjtxV2JN}+bz5WxX}c%-U}O|c*y*Cg z>^(PlX$W9MX`_aUoWO%UVey>AjXJTUgYq^}Ly6y2GZktu$HV}V7?P>!3{OFSn zFom71540m<d$91!w`fO`1l38pc$1#D2IloNlDcnnL{IQ@kRElRPhQb76neq<;r!3 ztC@ImJ~QgLT<&@obb^Rx1d-UZtTmM1*3tsTBxj*cCkkEfHQh;hRw84GXrsPKs&e2k7=3Sx8zRvo^|IF2j$vuhryO zN<>{VGZ%K6JplI4kV!GJK%|Y-Y7K>fo{H=0O2y2W)d4!tN=gN1#Z@(OmOq%Ii0kkD zdCT7X{>9GP*doL)cW7b)3WeHx+a3wohBBwNX+k_WmGX3ktWw(45XoC zDe1lZ`Id0)B&Wl^ykvm2JG=g1D!%LajB8L3ZFTj+7|ASXt3=HNr;kMe^3u4e1ir>w zSIX>D%mtO7>wrU1#4j+rr=|*?71d5Qe`fU}jh$>#lXZ3Vu$bH9;QDEP=#pXPLLuib z3jtx9-huomM6twW@@-dI+Gp9B;gyx~ zLW{Nd>%|KgkIx+=K(qvLNHEz6qYld@b{3mr#d5rPqp$vgIJLp+ zL*C!)em7F13ej!zAE>o8Ixk-RMx#ZPz|COhcC5u>-=CA=9ot@GG^+br9s{rC2o{L+d){j!GXE(wz;+b={rVh}Lu zW3hk#e(>b+W<*gvNo)b)Ru8aGfIQ+$tHeqSlsZHh9tsU69%wbf58`vCS7u5SZP}l$ z)J;HjG4f9}+YK!&?DPcqADb}h;m`Qfq3awM@@~kwHmpwE%*_G zFFr1bOVoXf1oJq@8(9$-q@DU7)>38&uTK2Lb_6LWk(kUbi4?zB8FPt>5h{JH;NV~* zraQ7&t}Q1gv)9F@E9?&G;+fu9Ht?SSf5JmD$fvOpGmEK~VrAdXro=~X>L`|_CDV)( zMfw$^oCADIyx${uCBr{B&M!VaxcI7QIaef*cdzmm1bI#u5J)vI@`OMl{?Z^th=fL9 z97o|pJlFwJ8F!Rd=C>J-$|t8VC)^YiCwOJ!ia>x4f!wd@v_d|W#1|G~evUy$g~z8T zikGtidn9Tr4dhd$kljB=Ze_^rJ=$>sq^1GlH*$Nja`jGmc3dDxi$MxAZwo|eBLmal3;yQtYNbfZyaRgzcDlO7gP+I6M zv_zUnS9(ndRcZ(&g|xHzuk)O<&U)T2&sp!g&U)8*@@20D?47-T`!3gY-Pe!TkBs$r z&Iz9bfj~U^fBk6&0-bsf0-cOL^9%5kDa8}7K%fgC{Xg$N4$Ik^Kb0eT*uG0{nhkv2 z(sJRSi`OtMEiD4K%xnuE-7uF|VW8-LP>u781Xl7<> zYi4135mfcs;ID`7S3p%VeO^&A_kPpUE*IiiN= zI8{~-_K&RJHQoh1F~8vl@_N}(`~z*&vP;V7rqfS=IO%!0V)0T64!0r26}+ISx~@x4 zZBBr)-$Zv=ml@~A?d|o)#h(Oul-!anD=qbzDGhdVtoVAO>h(o6kc!ONvuDdSLTsCY z+|z4KK^x{4Ha2F~Q)us&m-cI=ATP5^CqXLL2WRSJt=Ew?CnJ-0Kh=b1hX9wq@b}3l zqi?6HOkG@Dbi%_yUo8mJf6Jj>pfZ(cJZLL)s2q9&Dw?pwAPbB@eOu6!5L%o|yfw(9WH0w`9v$5Dr z5Aw2-+aM1j4UHa9bwu0)BbdE{J58J)8vIERN>$*H)^#v=4-+ULZ+nUPd$qM3Hub~x z!F+De3#j(rCtn1sZ@qzY5dHa`6{fW}BqiaSm+b<$1AFF>i%XmKA$h`Myv1Vh3};IJ&Yq5{KikIgG>qWU(nH(LXZu?wxEzzeBcQI~xg>;b$(-yyKfc@6K`2FJSR zu^St;ouslFmnjPvRsT_p7y= zLz`$Xl^UlbelO7FaU06nUsh5C?@a}IvOfb=>^2bl5u%Y_9CI}ql9Qof>w~xb#xi&J z%6uEWM>jHXj#rX8RVizEfqPAY%sbY(zj^TPSU26JevhK^*y%G}TSCf1r+mubl$n)x z{6poeuWFH=M_;rX&x=;+45s+4o?vYIFB7?PA|^!KK*8bZYOYZ_6! zeS`1qbgM~aL6X|;U?cb+(m=|m{!Y@$%8JwGv^Q!y%Hn?EkLHtluC8C{ICW)ZWhra8 zy?)j8xj-s3S$*$4O^ta!czc8lJjB@tzYm&hZFu_fyzC}`3nufYB5U)MlX;LcP8v;2 z>Kco(Se7SpG&7?@?&(K}Ai8^;B52z>R^C(17twtlLdu$vBv$e`*0ZHOszI!^w0wC* z5KaGLVM3vZbolY(gkn;vg0`@mygj)=h#&}=3q<<>G%xGU)og015Hxsj@NlS!`ghOj zK(2%Yb^aqY>)+)ntM8FB4j$5S=!-0E62i_R>GW8S$;7_CKH9a&2aIn~hxzmXmNN3p zrtY@t6fs5|Mnhitj3j``?Tg)pzAY?lgw^{ra_FPUuWlDko$q zo!tC38^xL8e~=%(GfulBH$9!{2_6+jvDkB2&3Cr?-!eq~{%GAoCtI6&8R=K^(4{lr zRDAtspD{H*jje&K%0 zb`88JX&VW{yDOVYKGY)Y%>ML;9QAd3dHjbK5NPcg?Opsi?_vHOO=fl7#_cCX^L)_R zqRy@ASzhw}sq!Ip&fe(Ikpl_aGUvZ`@_{&<(u|vPBt7UjGY5z08-JtJbDye-59;GQ@%wQJs3-g6vgvst23<7f`m= zaaIRy&d7k@DSHlSd>(vvM-%*)p`rI=LvSvv=wYt^a3)qkT}UG}&t3 zy_a(Z=r(fT3jM2Y`Qd*=en-16IVWkTS+iUbq_&XPijh07c>HL(gT?}vFN=qa2@#W} zL=!}nDRs39XE#T(_RC7K+Ad4qqbTm;F-UFZx2u&$NbmEa;7hHj81|OJpbYaZQOwkHLm4FS3eOO zooVDy@Kwrk))>rC+XHB%B!EIzUEhHm;jDRD*yep!CuzPVxKzD@n3kFpu~Cg2j}&7O z0u>?-e%7ppctV?>&K%g(Q;NK4aN*I}!QS%}5h`p&~Jc9K)a2Q;ov;X<9q7`U9SsMo;;~7H zABFw}X=%$dAKbJPg|#avrYim@`^b<%cLT_L7S3IHxQ(zuxCdI8{2c&I;`NG3jK7rf+K-e$$eTN#3{$ zaWc^I3tFEe(wzBV%-#>}e09%yYdShU4h$st%~iwarAMmaEy@y?Acj(o9=z&)q?43c z$$tlJD|hA5;*tfIc@8Jre1=W^Gj9zVCO>t-budc=l3&~@4B1vjvfDS5Y?8oiRmM)+ zrhkv9Fv7&pkjE006tAeIB&EDk17W+!&)Qt6-C?gK7Uc))@1BJ364xXUOr6|UC%Jq~ z`PDX9?^CVK&Tjl9Uq1qBfGe? z%d-*1r`@z_K$-IHnNj7xbjgEv^eXu2_$j?2<6P4~Um)HdJjiq0_xx5cd>S%WkPNX> zVsAn#rrcw_Hy(Z)8fx97h}6{FootA?jgHjz@QQ3@AQcCMP-$s(OT35B=9*Qx^igB= z&j2tcF8m#vC#vbQSf!{Jv(!eJQ_pkg$e;R-!kU1qUS`euDBaf9E~hxOkeWMZ z#1FsPN#ulWoDysHh68|aybG-i5x#l(W-@Zl9~l`51XqmM4cau?y1K@7u9gvMY-CF< z(GAXXr)683o5Unf-InO$26-`$^Sk<~%MMAQO$E$LP{6}`pn0$j{Ov$5*Y_1*8jkmc1}VO2M{WYRmh(-6;Z|} zITbDRW8_aZuBWm>m@TcjROj5e*0Rd9mJ695 z#}UGN+S@mZ5BfYw_JJ(IQs^tAq9LxVXw7h{_JfKhb^{ecqhv`=ve#3x;tPHJh{>K4 zTfPv>n{t2hh&-E2Sdyr(RUs-kMD#Y1bNTWY22~ww_S-v^^XE^3y!LWF{_;D^F_K;m z1hn>m5ILK%RqsiwU#(kLa)k!YdwbgTN(tt&vTKdAZu|GG!XvteW6oGY5x+)4#U!9i z1_Zaa_@*j7nq=Jhm5ka{$i5q_8xdhk6J+@5H&)~}5LVtS+Pc-Cas8F8GR#f{GwP2& z^u+vsr&+iSsk`Ov0tGGsC?aj1m^F4!lJ>?M6>r;^rQ7G2I~}z*P4e)SBv)mVXGZnI zW@ohz2Mo!>qC!U_*~m6>pDjvo{&uWyG?@7_o(f^gVY_d44P@VWdhm`s-yG~Qg87k^ zT3f3m!5W58r{Fz667Ii3;h6!nZ&HS+{J_=MWEd2=)TZGUpO%q+s;sl8w+MRB%k`jh z<)ub0TWXX?>ksEJVAI!eu>XX=-{AG5qZ> zi8>ct)~(xt6LXTu+GVS@=}R{s;@4g*2?8t^C#0L0r`;U#oS?#_5e=GDesA06 zEOG%)9JOhP?6#7e2)?H4~i%%x2~h$q_p%t}>U9kjd3c4B@n7*Zp3$a*3#c!>!zcQ%xU*ziF&RE#HVr9PBb zV=HZ!<+1IaTJ(_MOmOZr>LNgTm3CbHQM;1jc9blu{PK#q% zD}3OC$IO={`3Sbf;GvPqKdr4VA0%tAK3U;Q)!9!cwwl~>VbkLPrE_zgk~!`Hf-H6x z5t>*LzDVrYt#&FdZEN%t2Jk3d&_PHdbaTf2TU2Au@bq+*CAG4)b3T5u`u6#@qoWo( zUmR!5U1?+Be7+a$@*)&K(tY_AZJ#J6hx1gh`tm=cs$0WCps8FJeg4?5h&KEP)`8;K0( zY5Rr`#epVFQZ36@P4b077vRSt+oIqZ(ai!ppsxM61PE_J3U`l3bpLrM@+Ic6nOVf{ z#iH(>P4;76U}pCM=msi<8yg!`Jm(%Dzd`*J|f`KWsgO&pqoIjr%??cjy`4Do<(Bug5nF-ZKS;FgQ;H;71(WO= zJ+0nAFYtag&bo>?1(`U4XlYAIUMCA0?3TEfR2Onso-}d`>0iKtJ(9alS>gzAefe5& zKlO9>sZ;HzYdU>ehI3TB+vn7Ym}`oa=(-!CL8P|n9mWoXnEiu@36Ia{$qo6M#}HF{ zz8hla+vpH$oGYEcT8&m38ggjb`_h>_LtS_vqT-|F`SqZ*uP-Zj0zuPo^=Z(-v3Rx7 z?zO9MF5ZD}-?EgQZ37JY+Vw=?-{0y{#V~+qOaFL^dt+-mL~}cG_ifKk0}1GtMw$1j zo0~m~=BXOApU#bh@X4(ho+6XXOZg3}x+3?Uhi#~@xv4(?UgS#jb0f7idsZ}v^$VlF0j0ONr-y_M+nn4QQ{^ba0L(VH%iP>(IgK9 z0%iARq|#^Cdd;nx*@fH?#3F=G&Y=e5NzJoJzv49i6Y{*QN20Z|=Hucwev@;7y_4p}S7MkfuA}qH1ajoJpCNCewS@j5 ziItO4=p7jH7%6m*9PRDxmA7k5OitEZIaujO;Sr;UVl6@1N6Vu-nDv<5YGAgAyF7Uu z#ZV-@n-w~bFV;_uufXg9_n>dc7;=#TW)InoUdkcM#n+0(RXv_DlEju`!=mxwOXK0S zZt{*8ztypl+~y#Mo|_XYwdlG!4CdAVPm`==bktT%Vl!onzE^7^ARsW5uf!Oo;)O7W z3p1NSb@P-;oLW$OYtxF0OX}BT9+a1Q*lu=Z>(!9VblCt$kt5~?{p_JnU1{lE2t?6d zd`RwFe_3rTAZ#dVv6kaj`aeIsnvcq!#hRn)wNa-Ng+tbV>>mn3&xay5y3Y1zDEQ1) zJA*)96u$w@c+7VPZIe7lC1sS`NrW?dxx~T`l#;>rfmSpX#Lz${i_4p};+B6f8&GEY zH7@Z#v;Z5W&m5A|IDyS^N~YzN1y>LTRJ>P6-_9eSFhIHJ#z`o-i*S+Lc>aIgR8!7 zgzoV@{Q z>EKnbmQiC9$lYbECYud}Vmd1Ql*m|$4tKV)r?_FQ&zu5mC;h6S!C!w(1(V>P9|}Y3kB)>7ZQrKy ztGu-=%ilVBrxX~H-LQRENvU&wHaxj)ksGDpnAY;ETQZy)PZ;p|ej7aHv*uu1=WzuD z+T9QQ7Z)g49@_kDugkwEC(y?%AiyA?54}Db3#NzVs+&t2Gg%gsXzRD;rl!@;@vXyP z_7h@jc>C$QzLc%-KvxbiOXOy<1hvCF84@(?(32msYB}p8VQ4I_z7?+srdLsxt@4no z-}sH2wq|gbuLuY%uR$ma@XGV>oqv{$FH0bM!F0uuocDEIEN_5pY?PB@(PDeb?C_r_?j{4V`pz~Z)+C7ao`kJ zoC_hWy{M{{qm$@&K_F)2rAy{am$OgIzc+YNb9h*~8nP|--Sz#$!^3k|rg?<({Ejk{ z!G6#`{`eyxU~fSz)MvW+@Bs%aJN15KWW=!Fz|;8X+qZ$=WMph+tFJo6>l^9I$T10A zs2fFvT~A+2bxXBJoRPKyK4|j8$(xdrwZ+9hk*EV&<-tM1uAA9DU504>5Ar5=)en!6 z(sAax`AN{n;bVkraUbE>)^Atmk)D!e`Plj@PC?g2N5^re@5zI*)YEb2xF_zYd+`VF z{TXgEeY6@ko*E_b)LY^N@T`v+pPNsBcH@DGA+6ojI9nxjVt~L|AC4DP_{+!yihb5w z_8^}J1X|!E1LGDxOA8D2gOVPA;@-Wh#LayU2w58ErXOfm(!$EBOauh-x&Z(K5a`<8 z|3-%isf?VotPF94NrF`O(`wKH3K*3F+Kj15h0cVwg&Bet)&LB z0iZ`#0HpB*CZXo4FA^V_1sKqNxdQqkEZTnJcZcfbSXe58PTr;7 zV0xcLx^)n8KnQUn_hVaKptKQIkmbKTvXY}Cd#EnYT)B2T>4QYK^moe-azVxYGQWYw zt{57WhMwOX_T`0?-M~Eoq1$mhz&E^mXYIK)T*$nN2&CCaePzBp@d))_#d^m;&P(lN z!_V<%ms$`4Gd5PIFyG7t`jY&sALvUXWyWPzlM@lXJ36=9v!4WcihBXg%xhECJRAt@ zs7xJJTiY#2ns;px<9DuJ;M$ldSi2r80X(`Tsm*;|sD)JT3j(2EnLh?C*iG9AdE2S- zA+q=pfiCx*Outk<^zg8i6Mzw$ikzzpbrVJSrUJ?uyk~jgloE-$6tXieQ#nxAU0=VA zs`C8%dn*!{)W!nVYfNte^nz5qv~WUNvm8FU8rsulBG+#t1jRCv?DG8=KX}_U z<|rYZf-Mf0-D`bm4Axpc;$YJGCYHTZRNd7TOKRSsPBND|YLn(`2(G?JT6a`(8|JPe zwOG~47 zT1)GKgmb9S^{EP*QC;FS!1rKMSwWqPaGBEd!R{01LuXt$Z6W7r!9PdJ89+mHnm>cQ zNP+zPzIB?%F_Jy)ZeFw%`sF^4NX60N6pV8+)!a;iKFsRGF>9jmXuEN7eTrblv#wnWdFSscQ4ER%4L|D}O?Uoc zX%|fTA!~oN;zJ;+qGboWX4Q$K?ZprO0-`DV1C0yaU(zFbFd`xWRzDc@V-|^!5bM>m zp~70b+kCjITE(QPv*r+1z+()v2}RIee6Rg^=w0n#iG7_s=v9w6H@WrwNsy5!lO>AohwXRjnc1~3T?|ca0DjPGw1K-{{#e|WY zinzJ=dXj|N217KX)dA>MN13s0bXN`N+MSzACt5}JF23UK93RR7%UkCTH_Ri71oPk? z_&Ez)aANko?P*wTiTTY}OX#hwMnahPYJ&R-5VH>`Syc+~h+sJRkZ*A*Wu%6j`q>xX zVs}+-Z|~eYQ~HtxC>=o$&DdSAkowYJ*N1NuxaPW;ffAnVo;jASA0n&K)y^2bx%-8%Vj zrvHV~C+n&x&5W9m-9Z)LynU&47m zbGmR=^i@?+`0EkkiiQJt#vPuQ3ve&N@%c&5^%Da=Z_3jt(u&%#hbw1Mv z`$XrL%v?~1aav04C5 zrQCLIf46qs-90mN-7PoBS~p_ml+~Q*F0@}@kdIb5R##^&2VgRcM^0A6z}X@oY-(Lx zR;sO^j(#5G(_sEnBn}74!Kr$Ql*@*F-v$Qy`^(@Fh5-f!fQ@MIzC_vTGndts)p7Mx ztCLSoViyPV!OEa(M*v~~5h`m+OGD<*c;kXOCOFYt6co@Y45OqBt?v1xiG8t6%Sanb z$X4;p%gW2hM_B=KCmxM1MpvMJlaa63e*+NM*48-c<{OAxT#$c& zHdEXQ0N7p0l@&pRw(B1tNZ+1|VMisPF#Y~tMv#CffK~wrC7i^v-%iqq%+=l6Qr6v5 zAb&vP47NzK8cUFs{q2|k^otDCWJ3J8{r_}Edd6h{iud%aeEQU+4$w3MS=q8*Xka2q zpEi4mJrs>oKf%;0EiE;Oj|aMlf}qf;_s8G<@g;L$>ohrg#pTnAIv)LtNc`eUW|jZH zK)Vh}$LwC})T=8=ATAX!(a>D~L#HaJIQG~P1Qgx93`NBu#bR}Sxrq%Y0bx)){k|Cn332bP*n)< zxSN--xwn2B<_3YDECKKw`226`)39KASSWAvNkDapP8MVm6er}V{c~D1gwgQ=2BYR zUR+b)nv|5(r%y!!0s!0qF}IF&;deKUvh9&e^@1!)D1VQM*BpinW^9Wc>nnhJ^huQa z1lrvK@MhW6c9MBDy>YA2KpGVmS_8{2k`aKA>NZ)FuM@9scxeH5&Bd zr|0)VcmMnMtB9ho#j|TUFp9Wcuyh-n7*4*hi&IECk~xkj)*uNWx!m^TCW zPvm#{JJAwg#Mp-b{&E1y7?ASe|HA|LrT_>_KtYq?+uO;2{I6mO)Yd1?rjM-eIqe;& z?+d(&s>q!QCXG~E^t-lybs{c)+Fw-!h8t7Xz?U&OvNG~8R&H{SQI19x!BuRg-oVgk z&?b|yC_-{`DU=BR1}>551+oimE_XfS3NS6<$+{=6a0?i*7no?3cxLMoG`C+(;(kRVgV`$L;DD{AVJv0K&^I~v zcD+%VK%$89841lmN-K)Mye6x(&(_O_v9?W~R$F5}__YuR08GZaZCg}$BUY9^E5=vn zJ9+fB2+At~hV8sm5Sx9)5Cun$jAe$?Pucl4>9oOWR{7RChp`a>KSdOArxsRVGFlhZ;5)vBT zUvpH-v)tTVPJa>ptoRLn^g}O-=eoA6EK^dIcvV7d?0M zbI+0x_vFwJO<&cYOr<36scW*u6+?rvv^7>T5R&ifX0_d#Bv>m) zppAFN4dnzy25vg=DcaW^U^=OMus&H|1hCbu3IXIOqL7_U{Y_pz8|-QE;!OXsSD4G| zM+<<&6GOr3N8jOG2it8n!xcqh$e+^CNHJ_1v?oG0K^(_0o&^k5iASzauj(a%gGfo+ zvjaIw5E%hOfCm2c*BJ>%3k%lFtVDj~K)ZHJurLs=6g$4FcRcKAQx7Nv@0kI0{+lL9 z)^>6-fVI22qJbvIJ*0uyeUA{EZ3HvFv}FL#Z<8rVcoeRq6E-Q39n9x!@W&tD8%>gL zzxSHc9vy7p=`=~+GfRe;m>F10gLcV9N}3gc{qx-e>b%b; zo5-&o#F-x*9gRu6nwpmpF?W$GXlH8Y3mlk7)Gu-6BP{mcNb=!5XUmVaG20nLX2L-o ze=@iVkSSVrs)A`_0Ct#2_B<9drKGwWgsbTP{8(xZ_JJTq4io^}2zW$=w>Gz+{Cvd1YWv0mNRpc0u(*R}dPYX0=V*=VA6IV*$l2D< zRQ5c)s_O570Sr$$0CS9u+CmSUq|DIsV)NGV_0A-5hsAx_-(>ZYbMJ+8q&1Z(ayLKK z@fjUoi@I_1W(@rrb`40UzP^EfhJAmad#&n!)d?7BmeEVs_~E2qkJzzNNKock!*C%0o6a3i_uMnrxu4X^Dh?enFUhNreNUjo`d z-B=pX{YXndYe2MmH*Qc5f1U-{wv*A-?~PWN8GZ{9p&)Vv3{Kd~biedFQjayyku zH2NIuPwNwlhPL(AhjbYygKvZVz9Yr=BYB8+tSJv7Q>;kFGkbc!l8aum)|3?bGJIf!A@D${=v4+=2R-?<3|g~-*sbS8p#Hg z<1)Z(eUp_rh98@uo&&vzP5+suA0l&i(K1R6x<0F!88hj{ZR@? zm$SaWvS`%!<9#*c$)(Vp212 z$%00(SQ$XY_IM|Te`ut?(_)jn21OKMFomtHi_<9lxd*>9{SwCAY94Z<6m2s2!G*3o z<#x(Y%yW0OsoH347Ep?B&=^6%(kx|NKzm~6eg7G^W9=yTycuQ$OH`g$Qi$w}bng)KHs z#%j^cXrpKH*)KQxqYx5N)aCO*Op#e5w!PbiA_TN z5vk*XduUTLTfm=W8hCwJxGDTp8CbnO129`4nT)r7t9N3zXRm3Nxz;N$&Ghxl?wva) zqB`J6mHI8fa#`j18w-BD33DBnm2f167#BYT><|gJR;a1H>q)SCY=5cZ_6iOqXcK61 z?p*v*EUYU%BmIgX>MNgD$wkX-KmFXz2oPj!R?=0XVKT2h=6j(<8GW?qH0aNKK-r;@ zJE*(EZA@d1e8hN(Nc)Dl`pY9QyTEuJNbK(YR;8q4I97>W-vOGss?XRHo1s2HlD&QJ zhSa$H<=$R>qsgg>tSod-PW{;^Lk|N3z=0Od~qb8-Ot zl34Gr>;bd4%C=|fw5SKpFY|AnKLNx~&k5Les~>rU`Lg4-NuB%nF>5*e_Ylf^x-vB1 z(P2{S?24YDzJ3xC-^W1}T5mOMDjJy>0t&}J!pGN@0Y0+s=8Vw7A@`eredE>tXr6IA zvmjWQ**~^*6asmr8T9|wfhqxku!aDMub>C6E(@lg0*QQT{a6DG-~Ug%8k{JkT=O0S zaEx15E~64f$-%%iqyT<7X`T#LaR(eYPYUk2;QQRfVRAsR1w1#!WglCa6?VS#u;m00 zu-6HDZ=OAg1IBE}SFDbaMuBjY8|EG++;64e&6Q z%P2V;n|qOqAG0f3oH{2G0dMbA^o{?gqsi;JzP^4>PLLVr?~}6)zWG^s7mv@5ix(Kk zRod8mYr-qE7nqYd@_$Fk@kTvbCg3gl4DhI_XE*-6^Zw%h)XmcGBfRJSLksvXUl`C6 zKwos-Yn?eG#rjV>$QI0 zYdF}p?Qry>j( zMS!iFC;oi&R8GBCXU&wFXXA*ui!Hnt>c6}H{5v9EcfMifp6%~C?!+oPUU{49_xjZK zlf&@m?Yn}%#qIwBD%Jr)6fq3hXL3J)p6AlsZXF$;bU0iQ?BqUo?q%Zd!NDL?6vX!r zcYG-C{kTtsR5eZYM8NAataETPsn50h)PDw$>uTEmxuzLEAEN5!T8NN;4X~+`paHxBe7Qz zf0=`81pexI%eJYz(Tqa&?vF7P+tM*@7PDz77OGipx+cHBnv}b@NQlcA6bfQX^5-{c zAlZd}2;At-dDKHVJ;QI#t2Wn;PviNPBr1BzxF!Eb#P{~sGVX@DxGOs*!4@u&ZkJw0 zm-g)`FmhD4$B}Z(jqVH5+f~ zHi5Y|J?fweVe4zQZy5PdFh-00JrA~h5!dLy^cBS+j}+x07um5pVy*KFe)^=r2tv?4 zG*9U0pgeSL1p9!2WgX!oX9=SM9J(?Hu>GFGE}(Bte+nJ4Fk z4+)VUCHPH8c!Bp_|Z#>@-Hb&yENvK;Jbuj+`)jmTaNIT&r;`w;3h0L%j~=* z@s^++>13)Fv((Z~9CMTueOj#HCu|1rVc=-4-*kv|_t$uA?rfJ0`%KA(PW;>*ww`0l{sVzuJhU@(3enk0FaP=R3Zrp2?@a1(HpCikAg-X9(l5B!U=AsWV=M>;tpa9En{JCkhm}+G#afiXOKy9CK)-#KUvLVewZ7j9+w~@Zc zLl}Mk=D*6464X4|RclK{9}{3(e6yVO`Biv`!@Z5e#g)KLss5Xhb*sGSckJ=#q6)xn zddqz*ykEsm0@#SNONVONDP5n7C{T!6<%3l?#bQ@ZsS}wSeQ`DvY#ezb z`y^Mz(Zgs2ivibO-1Ms=onYV@B*xlcZetjEv4wLNSU<@{%{0B2F0TvaA+x6TjGC5t=r$hKCrL;uaeIWZ8kvaV_&@3W^ zxw`nnw~K2{gC`p_~q+KvyEc4hgv$dxOE z)$Hf3-Eg~?0P&-zDRyLBL}P2*ced^{1%6f8X|OQ!aJAeNS09aWYuFGl94wyhWzzX& zEka>uv&t)Tf=@VUIaEZsy+W5(>g2w*G;;bnU{yJ zaG0G|a_dpm05)Hs(depoUB1A;>K6Ft$ftgEX6-LikL5%-_ut8PRMI|4r6>tM&JdWG zv%8qYe+l5fn_8t|(>b4(AU{KA9K0LU(Zgqv*^G65fXD87BjuE9hdNV7Mg9f({g2@B zQcv$XVGO4Mg%hsuo6w{VF_`O5f<4f;h9ua@l50q^S0hVtW;JwJ%1wn=FbT%2c|B}D z9~nR2h}+1G5wi-8OCQCZbJo+{H+EV*6V=_9Ss)xdU+PrE)-iNTUs2?CHVVd6)+^+g zn%X`#_hUCooPA9^D*Me~bH2Z@4jtE#PT&8^1$rcLywXN__g30M2@={K4-p7NWbdJ> zqiV!~YEf>`5!AOed?n5o0{V!q+p5sq0q=a{?;u~Xau7#ATf@ldC}=QXt|e71QS`(D z|HLep5haffNwbwu+#TQ_3uyTp%!X{A_L)W!U!Ib+M9V2CIAXnQ;spkmJUxGW)NyxT zPm${1*cnKZaaua_gg;#q=H=R70ko<=roAI#Oy582eyQvhv+}FkhM-M(^Kc}CFzVPQ zZ+|HyiW$ydGjo8>Or8I1wUbj_wo{5elX`y_UNcMS%g1dzMpZBz)KQ{aJ-jk=% z8X_)i=BcF~BVf{@Usam^a0pNgLm1wAiJ}fRHh27)U7g8lTbq^Gq)K9~Nvs%h(Vuv- z^Drl@?`&r*Pi1j2jQ&LtcNM!$iP8+-xtbJ;cUc3e$T!vMTBKbLn&m7;Tjc*bt0pQZ zOrOabHLJ;1*_!eN3i;>OgT^YwF*!cz&>7aifvecd=;)AHiR=kXF!RfsR`sQt*+XN4 z{&N#F>y-gZhfae_XzZEi`-7oSt)syw->fB^c5j_4du;RLngj&ZzO9IUh(co2k6H#*0-BVTkp*U*>+kQ!F*7)8h(JoW}U_d z?18tzC^<>3hfk$D?cK7!>pZxI2^$lUXOQLr%tiz^ibeiu5K^1fG9uhK&Fr%CP(1Ns z#{Svm7l(&i=EL}~eI7#r#Y`b_G(-TK{>Kxb8>P7%5CvMokr6`kM5>IVS__-IaZ(?05S=-lU;#Mj<(WT)oy8 zZ<*9gLNBiDchJ?%!HU+mU3xaby}9JWZ?K`_w$i?ljzN=VdGABFw1*KpGgn4qVxuyB zIW5#5lfiQubHvCXLI$=tECWPe~7JU}{=O0yNhsNaV}jClK4o2EUlJl3eJ$~v zuW^+K0hV&L2MxqQqWqEHYCe?VheeHzqCPmaK*uu5`<^K&w1u+jjX9r0tEoS*jru1dBmd}Q0&4wsU&p$n)oM;Kym_8<9h1dI%#0ReZYMD}c zt+*I*G+$An04x7h>_b&JS@EM>mtfr!>Fnat`&j)QAM)ODbO{Y)en`?GK(RP3CLDpu zr>chvZBf$$d|I>AUHjirohNi3m=k4DfJE~O&?3|i)^*6At>@yKGu}|jiPy!|RBmbK z-v818^8I;r)>lwq2W8;m_=s2Z1ZWB5`AZ8CTC(05rpuzHi4)(#Udm_k^v7O!9b+Zltt6?!1Tbm3AJ? zI5IrTy-nQS3qbZMF>p~b>9q-!{f|KM+GV}}2M~Kc*cH!%2>Z*sk_hoT(nIoXFsYX&h+jHztR{2D3Et7olzBC)Cu#VwRF<5`HXg{8@Ap~C)7X0*fOsJ zP5lW1iy1~MZF~5AZ$N`s;i>%mT#)|5u8%M%odV1o@+%jkOPcaATB}JcRwE)sC;34~ z!&D}D{HuZ|)*6l@vv*^d!&XxakSDKPScVM}-LeKJILxHo*TpV&kb=5Xwmf?jAdq+Z zyctJU^gIeP(TM^e+;+C-nHv@sA;#*o{`|Yu>W-S4NLq>jM?9bxXWqy1dn$UQ z2k@phaIK-rwzVg3>AN?-1;{p+-ZA4hf@p8Wp?!OzE#^xU?O$)N3wl1I(N)+~7p26D z`zBa4fO6R+hyn(vpvJ*7FB1EodA)}XMyk|u?B1RLkW}=m1Eu##rF6fn?nE>r*vxP7 z>s(`r8G!a~S_<29K2_r^1sZn4q+Z!yWv(VkH;Y6jsVT|J`;DxGratW3VUM}EwKkRB z6w-fbBdI?nI*zW^hy8{Fb7vxlp!)Bxhn7!m zvl2??%UpZZSRh5(lW!cFVeO6^uMnb9`-wgPlPAY@4vsZ{Y?a)~N?J-*^K~A&)ab>0 zHNvRfBxM0|ug_Qg>Sr?}PWM6^b~ZgZu>Xp2yA+z<4|0S+e<>*-l$TJr5r=JpTlxHM z1n2VHvj;h83UkHxQo^9!3Z&N%zd0R=ptNZ0ZhY|f2_eIO057D zej`7skqt1>yKm0|BNXB!K)!9)9s}C#$|b-~5Zn_UW_(5UTW@0$FfPHUW7Yv?4DYo0 zTEyl)`5edQ_}{yti5_}>9^f>4a!n9+4Fru+eduFE%4jRu@P5?oa_s8n;CzRDX=_)o zZ6M=5fTCS}!uCL*BwJcgxh{P6m8|`qI^d_GdS{)Ple0m{h9Bc=q!n>T@~kR4Q3Zrw z44BTG+7sPRW2b&xW>EXyoA?&GdMvnnjKBSGYk#mnEo)97h{%3??zcRTGF+h6+0&;3 z;;9uQUd#2l%35x1>%;aDVpcw$m7b?RIIVaWsjnP6RHx>`93mr#SvfhbxN-j>mue+4 z(QW~77dQ`QQhMQC<9@juN9z~3j1qnEo1f&i9MoRf^@zw}#r6-u)s;QMGl`j@Asu$h=Qe2*2 zN6fhIXX(sPmYh?$b)v)x4D$OWbg0WIYu{U6l2P+D+?9AD z>Vei;b5n4?v_|#PzJAg?D(IJuJ@8cD)z>(zmg|pP+B4|m5rGT{PdUHpg1Mu*{{Xx_c3;30t_KigCnwYY(EI@@$r`f58%6MUL-uAvW4xxyk+ z-T;zn zoIRThwq=b8Q!(u2wS#2RRVucCA$t`L%&Ly!Fe|>ScW=LcKgX2G0Rkkqp9pqFq0?SU zg$?yIfb3=f$3U09%m#SoSb=YQJANBB*d?i~NoFSQ2GV{ESOO|2bvEsDCMw$V%>q(b zj=$A-bSj{0C$5f`M0yTn^h{o2BdW;n^EzHG-PQ&?gwvet)z#G?664`9*dD=ff}d;M zMtx^f$S9(pRs^>vem4U&yR}Jx?rZ7$vn@?9$mh=a+Z>Jty&N zwj-TUprlL@>s)N#S0=0GF?P;c2ynEf1_|>(J7+RjT!qqDCqf@~!|;_?#OjS!>h4X-B=GJU-iBU=3n&Fqzps`CvitBQqhxhAUIKOy4b2V;c6R)XzWv+7zn zl>v8}#ed!nd9ME$7;Y9h?u6Z^XxxQ&B#-A^$5|^DrKM@h#{n`pq%IFM=IG{WV@u(E zxXK@yWW-RR?z zkHv;~#r*s0MAanO{6CNR*-rh)0=z(GQ0y_tZ<1syjlbn)?yHpnYb@9E7oJXavzBoF zoyk`jEb&Z*OE1B#0x@MpR?k0tm^;Dg+3Y?ggeak^gC->@XJtc{o7B4ZlC)Lja(6|d z6qy)0PpqHe##snKwl;ySLPnd&5;iPE-yslAIRh6Rczjr4rG*Yrlis-K15FNh!PZWlzOg*>A32H^Tv& z7$D7jrmJ~xYuyGIcCbDHOQ+4|UeB5>L(J*c6eNYT&6ClvSHtl&%dDK>OQzbh%^`xq zbZSM5pAG`*yZT1FfVlEwCUV4$MywT8rE}0U`{IX2tjFU7f1RzNbZx&yP1N@vqlitk z<0Z#RWas!0YIz{Zvqu(4){vJq?6`w?*vpqt47R*@ZsZpbdB_(u?5N+;h9i-y?<|7N z;QS)B>%mfDGN(^VBfoOM&hD`6pL=XSO(3clni%@JQ*UF=yu__%x#9Q7Hb+PE?-wf^ ztVP=gY~t+1wpLr}>X@afrd69N8qoF0CJ{T<==bm6kzMCorHSM8QM>g~;{xv5hJZ9` zGA@|^nP8HJr(f6R{9bW&R^ytoYfsMX&dW=-=Ykse=Iw^^0(!CZ@oHxQevh(QY6Zz_ z?jzg@4!37k3j#lmB||^I0geD=5HQYx`>E%8wx_EUhiLoJ-ve-+?|_GTVDWQp!%i4R zheW_GcL!VTn=9D6KTtC}&u$_%8M(R=rK|NlMQB2IhSICD&6Wm|*@_WVF6eF|d!V|d zrKMYseJe^z4B?M)KTZAJ`|Zh<7PtTYy|#Dp(a zuk;-@13n<=&Enb1Qeqb#Zt%ed%f(}3Eh@O|$PdPGK>pMhc#=$N8yVmSMC~S?B-FE_ zpy6;UpV5m;Hcm)(b*?h;wS-_;doWvSuXk8bJ<9GFFaiQe=FQmn&J;cW?}NEr%pU{k zqmLf5aX||S%%^FMPk`hyK0ZEVW^vJCO6KM9*rVKV!GNj&V8|hwAnGw%Rz;1pwJNYa zXwLxv`zL`FSPQ(|efWZYS7&EuN5@T{pg5)5sVOOv1^J}$T>@HK?d@0E2QZU_ifgnH zVWnFD&tDGbIU?E%Q6|0rkqaluU?Xtnzk)Gl_^&rec(#$ znzF8nM35efY?rh#=3LzX+^;k|`k0j7Zd1J(07tz+j#YZ4H(LYKv6YxxU;&GQE>x=M zbEmT?hD3D=?=0_mW6kwD%b_)h&)5n}`eS)3W3o*n7&qM$Doy=Xw$@cmQ48Wcf!h00 z`9x9}05{fWkHxg6B0Eq8Q#fv=jx4-I6&N4p(fL32HTbyi+k z$y^HJC|LV;v_y?Xpge}kfGqs-zc}2u?+Stc`4L;vHV6SZDd*JUryPN}xPJ7;SLq6Iw-U!eFeXvnAd2uU`{U-OstG?3DgYuy zz1Xwy0SvpiCC8-+0n{#&z#9%|igJORoEIu&ONw6VE;PjHsp_WBrPzfo!nQcz?Ee6Ih5YgD2#Xbe>Pv{^4Pp z2D4>~kBUcCzm$U296#uuCxG+{5jQk6+`<(Q?lH#wZx%lsPLI-CTUS;26c2ZD;%sE* z`jcF$SuEDWo=R4f29J>%BLtm(vpi=cD=BIGa&~?ehwb_TJTADE>{NdeTMi7`6Filg zJH)ZDk}*-SvDnXU6y!3Oo6PL|sYgSl2==UkQ3O%nT>`y?Z64=tnPqiJaD@>oBcyCKH6+p!uOlAc-v8u}&R@w@OxwJC71Y zRO}9s+{ZGe3`COG8U^v8AMXs_E{ATEPAK0jWvSHZy5Kr~FnBOZ9DdK9M_aqtE*#+K2 z-K;$KQqo2KV|)C3-sbXA1UKD;5+KbVCRq5q_q1 zN=HXW1wWaJmL_lr3W*wSgf-LA&bJrQET$0|P^vA;!1#S6-3EfQdj4~$j!MLMb@QDf zW+#BatqJ#rS(}1QUf{9S=lob(8m|uA8jf$pAx%L=kTrP^hz$_t`3v8A#nnGYMzy!K z!y+YaU%iSP{vg7l&IPHv4^4i9-ddh+_xwcDbKnxW-ZLKh$M_&jo4;xzsy7HP4%a>p z8uwl++uRIkl|auGR3o7DB(qv3rSoEM8Hp*A8fH8(Dc_JkW~v9al`9wv=mMO3YE^1CezGnLd|Ueki{H=!PN0noao+x zVl0u~W2*rJ+ay)@B9I}v%YaiAe&G$K<&q>#FIPa31G1{0;lqCc9}A#*RNoE!zIMN` z>)#RhXxT{>v$7X5B*VltLXw_`6@SZ+X`S7{f&jn#02dcX{h3REnD;x-3w?@?*$El2 zWfp^%7##Y`M_>J*)9IG;FeDheptwyDkIlym7QojZfLM74gsg-aR#f1|lKP(L> z4=W3g>*?q~9Q5v~eO6ZPz~^|sHh*OD6jWW1Yio~axnm?R4=Nt1y>Uk7jPUF%AH@AE zkD%CA9I{p-b`e3av2ei>^1i>NqMDkF17-ECZbuY|#0FHGopcj?ZZ>0-XMzI~5OfMrSH7v6gq z^i+Xh`h8kWO>s>Pco_pB=PZ!@?+*3^uHuSXTJl;|1VT<_;k$Dh8h?KgL))RdM)JV$ zU}52l{729L;B^mbfQU9vPC-FMK?$(y6_j(n1?*7&hfL}JU-has3ZJ$zLU)40GC&;mp#*k=HdRq#-iu_jaZ$zTUa#FaHA`(RvLw^8IXAr63Qvo33@nbG>D|oAO9OWk zQdn@CFOuN&VAMS8c8k~Z8O!SN$TT^l>6>g1n>d5>cnKG6sxREY+{Ah9o4Gs?4@2sy zR2gKct>afgujq9&Tl@ar(5AID*??4$?tTrK?hh{7$JQAPp|%Szi_I(a#GM`E+<3{T zdg||9+nVlXi8s*f1Fc?lP`R+-7}FNZbOsJ;`X zkWV)3M{Go^Y3rc9V@g-jw0$HbCFe@KwcAr8rfsA^ISAt9i)douKBDQx9~R?F@A6i0 zTvo4coi8q1x(YZejFSDe$7K?`@J9x`c*S!)WRa!cT)zqh6DPzXo@HfaIqvLE-DjIW zKq6hTFj+nM=EEo6`SS`x>R&haH@sVXAYh}etD_?*-d>#7e?>bb@Q_KCDlC_GFokBv zyJ&V!|6<5h{lJDwHZ8rEXM%AOhT(4#UUkqaUM7ZyzaHc_`s`yuCQ* zY;=Z&89;I%kb)wc$@`(E)jnP;;f1R6^CBsxS*g2tN7W|d(hkAi4}RPV=A^@-;>PF$ zw!n0aCZw#QVrHseXVmJ3XZMJEvNnSSq?L?hN`@&vejv3)%`)HbiM-CcFyZIZbT4b; zitGEfTn@oxWrgC$EMt3fp@H-ML9}2Yeas37LjtxV2JN}+bz5WxX}c%-U}O|c*y*Cg z>^(PlX$W9MX`_aUoWO%UVey>AjXJTUgYq^}Ly6y2GZktu$HV}V7?P>!3{OFSn zFom71540m<d$91!w`fO`1l38pc$1#D2IloNlDcnnL{IQ@kRElRPhQb76neq<;r!3 ztC@ImJ~QgLT<&@obb^Rx1d-UZtTmM1*3tsTBxj*cCkkEfHQh;hRw84GXrsPKs&e2k7=3Sx8zRvo^|IF2j$vuhryO zN<>{VGZ%K6JplI4kV!GJK%|Y-Y7K>fo{H=0O2y2W)d4!tN=gN1#Z@(OmOq%Ii0kkD zdCT7X{>9GP*doL)cW7b)3WeHx+a3wohBBwNX+k_WmGX3ktWw(45XoC zDe1lZ`Id0)B&Wl^ykvm2JG=g1D!%LajB8L3ZFTj+7|ASXt3=HNr;kMe^3u4e1ir>w zSIX>D%mtO7>wrU1#4j+rr=|*?71d5Qe`fU}jh$>#lXZ3Vu$bH9;QDEP=#pXPLLuib z3jtx9-huomM6twW@@-dI+Gp9B;gyx~ zLW{Nd>%|KgkIx+=K(qvLNHEz6qYld@b{3mr#d5rPqp$vgIJLp+ zL*C!)em7F13ej!zAE>o8Ixk-RMx#ZPz|COhcC5u>-=CA=9ot@GG^+br9s{rC2o{L+d){j!GXE(wz;+b={rVh}Lu zW3hk#e(>b+W<*gvNo)b)Ru8aGfIQ+$tHeqSlsZHh9tsU69%wbf58`vCS7u5SZP}l$ z)J;HjG4f9}+YK!&?DPcqADb}h;m`Qfq3awM@@~kwHmpwE%*_G zFFr1bOVoXf1oJq@8(9$-q@DU7)>38&uTK2Lb_6LWk(kUbi4?zB8FPt>5h{JH;NV~* zraQ7&t}Q1gv)9F@E9?&G;+fu9Ht?SSf5JmD$fvOpGmEK~VrAdXro=~X>L`|_CDV)( zMfw$^oCADIyx${uCBr{B&M!VaxcI7QIaef*cdzmm1bI#u5J)vI@`OMl{?Z^th=fL9 z97o|pJlFwJ8F!Rd=C>J-$|t8VC)^YiCwOJ!ia>x4f!wd@v_d|W#1|G~evUy$g~z8T zikGtidn9Tr4dhd$kljB=Ze_^rJ=$>sq^1GlH*$Nja`jGmc3dDxi$MxAZwo|eBLmal3;yQt { - if (t.sprintId !== currentSprint.id) return false - // Apply search filter - if (debouncedSearchQuery.trim()) { - const query = debouncedSearchQuery.toLowerCase() - const matchesTitle = t.title.toLowerCase().includes(query) - const matchesDescription = t.description?.toLowerCase().includes(query) ?? false - return matchesTitle || matchesDescription - } - return true - }) + ? tasks + .filter((t) => { + if (t.sprintId !== currentSprint.id) return false + // Apply search filter + if (debouncedSearchQuery.trim()) { + const query = debouncedSearchQuery.toLowerCase() + const matchesTitle = t.title.toLowerCase().includes(query) + const matchesDescription = t.description?.toLowerCase().includes(query) ?? false + return matchesTitle || matchesDescription + } + return true + }) + .sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime()) : [] // Auto-rollover: Move incomplete tasks from ended sprints to next sprint @@ -989,6 +992,15 @@ export default function Home() { {currentUser.name} + +
+

+ Sprint Archive +

+

+ View completed sprints and their metrics +

+
+ + + + + +
+ {isLoading ? ( +
+
+ + + + + Loading sprint history... +
+
+ ) : sprintStats.length === 0 ? ( +
+ +

No Completed Sprints

+

+ When sprints are marked as completed, they will appear here with their metrics and statistics. +

+ +
+ ) : ( +
+ {sprintStats.map((stat) => ( + handleSprintClick(stat.sprint.id)} + > + +
+
+

+ {stat.sprint.name} +

+ {stat.sprint.goal && ( +

{stat.sprint.goal}

+ )} +
+ + Completed + +
+
+ + {/* Date Range */} +
+ + {formatDateRange(stat.sprint.startDate, stat.sprint.endDate)} +
+ + {/* Stats Grid */} +
+
+
+ + Total Tasks +
+

{stat.totalTasks}

+
+
+
+ + Completed +
+

{stat.completedTasks}

+
+
+ + {/* Completion Rate */} +
+
+ Completion Rate + {stat.completionRate}% +
+
+
= 80 + ? "bg-emerald-500" + : stat.completionRate >= 50 + ? "bg-blue-500" + : "bg-amber-500" + }`} + style={{ width: `${stat.completionRate}%` }} + /> +
+
+ + {/* Velocity & Duration */} +
+
+ + Velocity: {stat.velocity} tasks/day +
+
+ + {formatDuration(stat.durationDays)} +
+
+ + {/* Click hint */} +
+ View Details + +
+ + + ))} +
+ )} +
+ + {/* Sprint Detail Dialog */} + + + {selectedSprint && ( + <> + + Sprint Details +
+
+

{selectedSprint.sprint.name}

+ {selectedSprint.sprint.goal && ( +

{selectedSprint.sprint.goal}

+ )} +
+ + Completed + +
+
+ + {formatDateRange(selectedSprint.sprint.startDate, selectedSprint.sprint.endDate)} +
+
+ +
+ {/* Summary Stats */} +
+
+

{selectedSprint.tasks.length}

+

Total Tasks

+
+
+

{selectedSprint.completedTasks.length}

+

Completed

+
+
+

{selectedSprint.rolledOverTasks.length}

+

Rolled Over

+
+
+ + {/* Completed Tasks */} + {selectedSprint.completedTasks.length > 0 && ( +
+

+ + Completed Tasks ({selectedSprint.completedTasks.length}) +

+
+ {selectedSprint.completedTasks.map((task) => ( +
+ + {task.type} + + {task.title} + + {task.priority} + +
+ ))} +
+
+ )} + + {/* Rolled Over Tasks */} + {selectedSprint.rolledOverTasks.length > 0 && ( +
+

+ + Rolled Over Tasks ({selectedSprint.rolledOverTasks.length}) +

+
+ {selectedSprint.rolledOverTasks.map((task) => ( +
+ + {task.type} + + {task.title} + + {task.status} + +
+ ))} +
+
+ )} + + {/* Canceled Tasks */} + {selectedSprint.tasks.filter((t) => t.status === "canceled").length > 0 && ( +
+

+ + Canceled Tasks ({selectedSprint.tasks.filter((t) => t.status === "canceled").length}) +

+
+ {selectedSprint.tasks + .filter((t) => t.status === "canceled") + .map((task) => ( +
+ + {task.type} + + {task.title} + + canceled + +
+ ))} +
+
+ )} +
+ + )} +
+
+
+ ) +}