From f987812860aa8dc17441fc2c8b549e3755056cbc Mon Sep 17 00:00:00 2001 From: Florian Uhlig Date: Tue, 7 Oct 2025 09:36:42 +0200 Subject: [PATCH] Fixes --- .gitignore | 2 ++ config/__init__.py | 0 config/__pycache__/database.cpython-312.pyc | Bin 3510 -> 0 bytes database/__pycache__/__init__.cpython-312.pyc | Bin 1838 -> 0 bytes .../flask_integration.cpython-312.pyc | Bin 2285 -> 0 bytes database/__pycache__/interface.cpython-312.pyc | Bin 2345 -> 0 bytes database/__pycache__/sqlite_db.cpython-312.pyc | Bin 12327 -> 0 bytes frontend/__pycache__/app.cpython-312.pyc | Bin 12192 -> 0 bytes services/__pycache__/__init__.cpython-312.pyc | Bin 150 -> 0 bytes .../__pycache__/auth_service.cpython-312.pyc | Bin 2673 -> 0 bytes .../__pycache__/user_service.cpython-312.pyc | Bin 4847 -> 0 bytes services/auth_service.py | 1 + services/user_service.py | 1 + utils/__pycache__/__init__.cpython-312.pyc | Bin 147 -> 0 bytes .../__pycache__/auth_decorators.cpython-312.pyc | Bin 2198 -> 0 bytes .../__pycache__/password_utils.cpython-312.pyc | Bin 2067 -> 0 bytes utils/__pycache__/validation.cpython-312.pyc | Bin 3408 -> 0 bytes 17 files changed, 4 insertions(+) create mode 100644 config/__init__.py delete mode 100644 config/__pycache__/database.cpython-312.pyc delete mode 100644 database/__pycache__/__init__.cpython-312.pyc delete mode 100644 database/__pycache__/flask_integration.cpython-312.pyc delete mode 100644 database/__pycache__/interface.cpython-312.pyc delete mode 100644 database/__pycache__/sqlite_db.cpython-312.pyc delete mode 100644 frontend/__pycache__/app.cpython-312.pyc delete mode 100644 services/__pycache__/__init__.cpython-312.pyc delete mode 100644 services/__pycache__/auth_service.cpython-312.pyc delete mode 100644 services/__pycache__/user_service.cpython-312.pyc delete mode 100644 utils/__pycache__/__init__.cpython-312.pyc delete mode 100644 utils/__pycache__/auth_decorators.cpython-312.pyc delete mode 100644 utils/__pycache__/password_utils.cpython-312.pyc delete mode 100644 utils/__pycache__/validation.cpython-312.pyc diff --git a/.gitignore b/.gitignore index 858ec6b..203f64e 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ testing.py /databases/ .venv .env +**pycache**/ +*/__pycache__/ diff --git a/config/__init__.py b/config/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/config/__pycache__/database.cpython-312.pyc b/config/__pycache__/database.cpython-312.pyc deleted file mode 100644 index 71bd015262284b729609df815890c2477948d7d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3510 zcmbVPUrZZE8lPRS*9QNA#1tHC0!g_f+oYHaY5tX?g5VaKgm9R&jT>oYm^Ik9_Bylc zL`Fo4s#Hp(tI|FZ6e|4Chg5lSrK+M&_j;#$v9l+E=2G>fODpw_mPnQQbThji8&K}x z7|Gwx%=gWF-}jsO=KK72pRW;+cIlhvvww2~@NYU`O{jJ@`blR2Kma)v#Oaq;xeOoY zIofxqj*Ji&GS0Y@13Y*KK;bTc&L_ORIxZGCN&JZp#v~34;|XI{;;~~eTfo9_YTB5# zzOsvi2GZaTEb_e+AKuBb_!n%ebSUu0IxD3N4-R!z-Ba!5-n(}o@yzb0RpO&CL(5wVv=U=@U( zTmidfIh9QrvOL$e6`LN$p#JFHgxmqo+YT%gJ}VRtJRULI-nb|H*}K--zS?@U(t6Zv zmF@|jcs8h~SVW4EN7*g#l3QiN`y+v10T7_5=(d)o2e7R%@F4f6V*sF!4JQ*Y*fjx9 zs)v=PTDG;9%|U+71IV4F^fqS@YPYnP_3B?J7)@+6&oNEx@Ne^Vd**q@P48nX>R;xE z-d10c-e2dl9+R85Y`o1w=O+C%4Jj_R7Ys!U!<##J?1FCQpYaN_Ylk%ru#v4{DD1Gp z1HEj;4w63T-=$;|Y-W;hAKbqr?g^#9u25>(14^&_-zc^28l|>fqZHhP(t$mr)NY}a z-{I^+dq61+JJ>1i@-7|RHA*mD^IC*{#7W&_ zh^AHCz+PN^u5p^Y#Z#Km1E;Vj_Qy-3lTmqmaB>6-Ig$~vGgBam05@K~MtJhbmDnV1 zP_^lVI;-ghn;yS1F^Pq~zTVT=Zwn3&P7V$Y#-i9&-JXeFjYTK0fHciuqT_?H*!x!| zhB3gdypcScnL0%hqhReX8HBizejrU6L31 zhzxeB+AReknz(2(O{P>uma&*iASG)cnpqG{D%hbL2zyexoS4!zHE$@`F?|bSM=DFs z^}U3eSE2}MNOB;WJFpij$wXc?Wb0aZ?CQW8=u}l#R~MqW1NjM=3vEx`n~DXhT>pXO z$2(xn)AXSKe*dbcqvGi>J)Om~Pd&$l;bm!2DqjA&uQYG=4V&%Jdlz4bpe6XwV+Oic1HF|%?>_=3pB+5BJi9piDE;`& z%E8m0dj8eYzI37JF~cXyf!E94*Vlae9$deFebv`l@pYQML&f)>`c6C#wl6mrZ{ZX9^=F;?7%jg<9#R86KchOyRkeb7nZo6h=ztH(PUV}yJhdYsD&K&mb#0UrdC;dl63xC-9=urS_w4m8#4_qgtQN9o}{yUm|mg?n7$}axI$z59aUBKb&0t zaPh-()3LJqnB~Tp)JP*Lo5;|JYLw-S2J=>Qd1d)VKB3wi6rgs|q7V&GLdr`!EU?qa z=Trr~O(wns)|Ph6(25pOLhDDJ{;RnQe&HR?*VY@4I4^P!VX^PAqj+{Py8-BUeVpT* zQt|5JzLHRit-Me%reNG)5S-oYjMbtUEZ4`zL7l4g|jk;a|lFC;b8lu~z;E^<~~4 diff --git a/database/__pycache__/__init__.cpython-312.pyc b/database/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 5989d4ae30406c78661e65cfc9054e9f5ab2b1be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1838 zcmah}%}*Og6rcU@+H0>N-~=cQ%F-kTOBGhskEEz+l>`V-O46XFs-FsAN=4i#bb`XW6Uam0175Z@m(~9f|wEuQc4m4l%QDjc6CW-{%xpW4x%eI-1rt$>& zP=>4fE9fytZ!%_;xttOpNQp>-0+OMK0!T)R=Z1uW%nf-(-t?4Gp-Ld3(01SQSUN*2 zT%kcYYmiC_Q6*y)=ki&qU_{EenDKtnQI{E&*mv|dBdeea=Dn~us7L&lpzzrs0Jsl| zRpE01M+nz+7L@#OE(?UE&|OslI-&EinUn0xj{OMn;{jm6*IgD)@J;!jZm^~MA5TM7 z@IClJY+(s?nkx2!$&y3mQkvuzFSx1F-ME!;n&hpbj?qFnkCCkpaG?PjC{&o%V*iH~ zCa&A%Qpv(ZFIq&eAfo3BB@-18D*#BtCCesRrpmLW zo_=`m{=EmrdT=*7a2x`$cr89r@0_e@lPyf!jlS+-)Ai0jqg8a9lA1e*j zD<1Qigu57d0&q9y&v2spga_Nc%*YBj40JTa(}6KzJ=Oqx-+)_hY)e~Lo)q14?b@Bc z9N(LDnoqRztMItAMhNu))Tli4sz){-_9NZSJ71>rU9HmPMpl zPxv(kU1Xm<#K;mjPzAr1^OnyDNGR2rZxo1c2`C0DWk3^Ry zoUkR@XwbB>*?f`BJJv01cXP(GN7cMPkewV-)optN&br;BGGC^cHo~}v%PZUzJ2<&G z%WfS1a3ANIiGLn?*Da#=aDoARe%f~!X-I+~`~up3184sPgTI1{hidP)-Fs^9j@r9+ vrLJCBQvOl8g)!k7;I#3!EVQkiZveKflZ_i&v5oOZUpdFx@CV2I+IjO|97VNL diff --git a/database/__pycache__/flask_integration.cpython-312.pyc b/database/__pycache__/flask_integration.cpython-312.pyc deleted file mode 100644 index 9d821a4e1b366db4063e6cbe81b68966729d2b4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2285 zcmah~O>ERg6rSNQDEph^X-g#@gYvS)slohLqu6br1(%ub!rD2rI&m#ZQvL;Uh>J%+x3YRS~V-67rl_O zx@A*4@knIqj`|eF(vXVUn-fU{>h(o?d_S8`H1NGHQ{@8LLk9%uP@HTGR{eY(so| zykCH?zZ=97n#c3VgkI7*=mF+O-9yp?nsB(#XC1R1dA1?NazNcWX!UOJR3ATV)0rh3F2r59n$8+;>Br zID#rJ`zy+BQjgG37oZ&p^dpTUx?khq zC;lw)m~{O)%cc5En>zL^(AaC_L1HzdM)y!oTSsidrn(KB4k^*=KGV}+Mu~CU1pnAB z=*1=5_dHlL-jz%@qku9KE~iW5qU$%{;=~G}wWwiWHV7U8r-{xq?p$op&?L3)zHNz@ z7v|~@T-FGkFzPvnoW<@*u{GFY5ySKZ`>L}X*ai`z7ot#{PxC_u(LSatoW==&g zq>W%8K&t;vnwP#mJTEns%)0U4M8#sJZEiz5QrMtVN9st199@L@IbJh1+;RHor>(pJ zGSnQ80JOT*(mw@S=!6CtXM)^cKsMbyoMWAW$LpBw`oR{k6#;f!X#4GWfH*-qn~lJp z*d7o@K|mTSlrf))=mAe2FgyWR6;V0F+t-%NydRu`lOPt*-zpl}vo!U?)V;C$*B%ca zyQQuT4lfT*tZ5^w+C)#ASkd0k;XM09JGZVNO&3VM0VLmt0P+-cc$sbHP=X?DP=~gG zbrT5Kkh)V>X~PLZ=1`U=UOYaN>B}&AA@b(LDUCgUZJaRRfwT=1>32@nrZ5|iIr z#%rw*;uSgoqeb+GeCCymm5Ic*Lf`W8n>4SX8Z>~t$YxU#gRHvB%Iu3Gh48(c?WBe!D m@d6FMKu4dI$8Np5S|00_$L^hcTt2u^{HHjME3Xg;5$j*7BMN%} diff --git a/database/__pycache__/interface.cpython-312.pyc b/database/__pycache__/interface.cpython-312.pyc deleted file mode 100644 index c3b58ab48abed48d70296b2f3fe603f7b537e87f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2345 zcmbVNy>HuA5P$p>EsL@hyB`VCHmw391d6CY(4atz0F4aP3baSJ2$<(_?%A_JGaQgrrPw#$r_tV|I$6rjd zN??8c(;wZR6+(W;AJe7f%H$R(Pl!)^DIlR_OQCGb68@G0B~)!S)NC!(ZCxTVxkG&A zG4WL@J%@O>?8;EH^gmIxWUhR9dz;tYc9JsJOGBD=W8YF>I~sCzr{|^I__m++;>Zm= zbeXP|T$!v(NQM$y@`)`|#b1Yn>hs)et71nj?Py|0EA8m8qtl9CfyaPHqDIH?S4xN# zK%iBkRk}(mwAPU?LI!*~s$VT3%{aCH+9=?LcfYq$~vw`xz1=hV9~Az6`NVun28GF2^o?@Y4;EWR}&g^5`ZM8RyZg>|*G+H7Y0J;EwR+QZ*ZV_W@!}`~=>EkyHrI2L zj=6EN9+BUS+5{BxW`3*&5N4vNgUA@Nbx?WL?S zWACECablN1BKz(ams56i$ghMfdmrtnPzV6(KIVmd+3P& zxu{liptm7JQ7iA9EUcUb)?$XmW;wyM?)zKwg;<2cdj5AV?ETkCT*BZpJ$BA&^6_FS zi_sXlAjBIHeK;G}!!DKAlCD`w(KU7z91;YcP0i+@@1M>2l**#2Ey8^SkqVOM?cjXX zR(%@K{ID$=-I950CM665p7&kr0yi8751Qlfs^f&QKL}8-InMV3H^?ju4-9Ldcnifl zAh-fwC$6^RIAE7?vw{L|E`~Q3`vApY$x>Pk21rJ|*Dzqat48?AP(mOWb@dZiY_;@Zg7$I=VY?wG2S>bm!b}u8QJW0e03@C*+xcovq1cX zWfE7nsOGL^aK&wV42M?qkL&5M-;4IL_J~G_mWc+;HszJ^MK%bx*eBqQ-@614`l%vG Z(hJgjLAFlF*57(lGM_5{5O|5i{{pWd5H$b* diff --git a/database/__pycache__/sqlite_db.cpython-312.pyc b/database/__pycache__/sqlite_db.cpython-312.pyc deleted file mode 100644 index 01339283e31e739e5565b92bfaa5ffa287bf22c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12327 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 diff --git a/frontend/__pycache__/app.cpython-312.pyc b/frontend/__pycache__/app.cpython-312.pyc deleted file mode 100644 index c2a6ba3fad665c7d6922d1bd8ade7637d48f6940..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12192 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 Uy?p=F!su_f6Tk#q8&!h-551-xt^fc4 diff --git a/services/__pycache__/__init__.cpython-312.pyc b/services/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index d7639efae90e3fee62f6c5b9536b4277794d8bc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150 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 Oe+t(a267luYWBaUPfnfy diff --git a/services/auth_service.py b/services/auth_service.py index f71f68a..3ebda34 100644 --- a/services/auth_service.py +++ b/services/auth_service.py @@ -1,3 +1,4 @@ +"""Frontend Flask application module.""" import logging from typing import Any, Dict, Optional diff --git a/services/user_service.py b/services/user_service.py index 2cf6634..db485e8 100644 --- a/services/user_service.py +++ b/services/user_service.py @@ -1,3 +1,4 @@ +"""Frontend Flask application module.""" import logging from typing import Any, Dict, Optional diff --git a/utils/__pycache__/__init__.cpython-312.pyc b/utils/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index f45d26bba00dfe65b71d8a55f9ae7afdbe535dd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147 zcmX@j%ge<81o^ukW`O9&AOanHW&w&!XQ*V*Wb|9fP{ah}eFmxdWu%{xpPQ2KczG$)vkyY UXapk=7lRldnHd=wi7%Q6rNr0+G}U?(}dDADb0okiu;q$A}Ugaq5>i)DWOt9w7!_FXKZh}-ZeAp zMzMkviAuB=-~b{LMe3nKM7eO_1_$n3Y$d2-2~rVAh?}W7pq_Yd?6uRB0|!R(n>Rc2 zX5P>DJ%8WZn<6m2_~w`5Nu7{iaS@GJTWKzW@+qN&DlW<3th!1`&8Q0MF*jDyGFnN` z=%sijUP@#VB_m@fL?w(Y4n~)CXO`MfTB}SC)vl3@Np+CDG!C+FSxG1U!0m-~CDfO= zT^4CQ)bp+_ilM<7bvVlfVS=-FDolVPm=KQdg^3Dxvw5HA+Ly~GFa-QHCqcXqK?I%M z8zge$I>{?kxn^ug6GGlqR+I}Qtya&bEEq4doX_pR=T_ibW$p*?zQz4Yz=RbPZP39L z@XE3)L6LcZld}VGNZRJwSIPVwiZH0UbIo4~q6$EkskWiE zPAVkOBCEwjq;+Si2S&77l+}$^t@$(Zxf+EIclAcQL4Tytc(fnQ7oeIq)D_~873H?_ z0j4Lh04W!YXB`^qtYkZGb^N@`Y{4woFIbL;>9TVW!!3@NHaG^uF?V4cJ{1@bHOGTOW9Xs5JX-c0FW_-JmISdL z3pJY;L>RvUkHM_u1t!w6R_{+w75x&M%2$f6Q<#EcECJ|M=RI_5SgiG2Vo`3CBR!RsJaI!yp8L=534bgDLEL z&|N+XA2DO%5D4(=uM~;*TtD&N#ipw3k2hl^-q%2_(MQaKHSICJAI|-c{Nj=$U4B7P zA0U<}`W2U2zUMAmmw{grOwMJOSxZ1PYvJ`b5NZX$kJF;tQ*5#@c?>@~-Z9{1!4U!D z5_uvmAIm`mozWpAg-;I=k^tc`opMl>#&!@8E#(M01O$S%drLI`3u*KPZh~EP|0Ta- z+1N8&&TP8ejf3xj{V++P-Cg!=PSaYK09}mpAvhJGS{7GUyLuEthtBk$5Q(iwoC48C zWTM_PCZTxz%d1=FsTSVmHxE3$Idr0Cp4g2y2?mKbK7u#x1X}+tH#ok9;OQXE>>y3+ zAPuyJxf5w%&>7hBuo}%d5W89@;iKKgNfmr($6DRBj^UbWH)9vbvYw7tUy#6fmAPer zN-A<+)$7+J8FIQdTrH@PucV7{`X1j)kg2`8cR@y^vO9 z8P`cGZIX@y@IbcxKo-sU1e(H6JOg5tGz?~$~fwX`w8zyBuzV8Z-32gn3UXk6j1tx@V3t-p? z!X&tKuGM6XY!<`GX88b~!CoQDD4pckF}k7LH)cvct+?zAKLQ)b191{WBc>?IPo(c> rGWt82`GL&bO^#gOcPBYgPmZiTx0#$+jo*v+DhKabAevT6X+`i4$&?3| diff --git a/utils/__pycache__/password_utils.cpython-312.pyc b/utils/__pycache__/password_utils.cpython-312.pyc deleted file mode 100644 index fb59076055cd258ba665126c62e546c26f82e3bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2067 zcmZuxO=ufO6rTN)R<`ABBF9lBrwH4EsMHZ{TGxQo$j@iCbza8B%2Jn}E>YuyL2z6Hf0jp@B4{aRrogIG5z?J)h)xggM>g8VxuW_c&*l zlz4O(Y5X?Qggw5e^K5W2@fB=V(vHfZc05cxC5$u>M&K#QV?pz2JQg*9{Y5Nc5sMlA zZHCEsG-+GfbF5L)!;paU^s(NIta-P^K0@vx;095XhfaJfrV-1(nxgbOgJ@rv`2tjQK#{Pf_Nz7u_o>FZj?<>)chxFrDVRlIoh`(3MiIv|73Mk{FB1dcG`{+! zx|~aycMLOLfp&=Z?d|Q2@`mNN?|1c^;nm^xxpD5$$K28TjBKHoqe}huaUj$Q%(eov z&ClC`>-EG@Alz7dy4ViP)a9elbo1V`cwIT3yw)f^Ej86n^j0f+>&4x6G|`^?q&|8S zoaqGTTEV$?Fkbf`%i~YR9*-Sfx%r3u;gK@6qa7;Khw}6(bBC-^Y8r%P1;R-~r@9NK z-0s|On9x9`t4I1Us;6b0$h#B#HS6k{P!r95@4o33s0vliwOB*Xxs{kmz$FO+fp)dV z(?+qJB3N~5>lQNv0K1}o092r+5WU5zgR+sUaD(zKCi%=pzvP?O&e!0=@dUG>?=iB4 z{s~|2gy&n~`Td6n6YcP)Ejd{C|M=iond~UhmJ)3i_rGc@ONa6jfwv~zpJ}#%@3u4d zJrmf>BYpUk>0tF|3YqX3j7i&^()dvG*(CESVAp@l9i*9V(IeucmT%5n(vO<;_P z0^}_qFv~H{o)rqQMx69boa<4Q=8NS5-kd(4!#80dB{a?mYv-ZPW!Zc3=<%bS+)u_c zV>jD=XTGg`+)X2gk`k<03^iIa8 znKJX~A~th|W(n+_uq3m>qO{w{64wo*KqBluGR??yM`jp^Tm}Mg z@-7glfL+8h`L>h0MKZ^9P+hyly8_2?f1+{c_tF=tU+wrpEnjG7q3xU9^8DwS;1b*k I0&3s(KQYVD?*IS* diff --git a/utils/__pycache__/validation.cpython-312.pyc b/utils/__pycache__/validation.cpython-312.pyc deleted file mode 100644 index 7a3e984bc906ed97ed3fe3af8fd54cdbd15f7eea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3408 zcmb_e%Wo4$7@u8x?RDbBPD~yoX<0}@V;~8Hh^7=$2+vlKQX!BU2=3yY*lQfGnOy_f zIuZve8TC*QhomZ1Bekli=)qDs1ocno#SlxROH_f{OHNG*QYB9PX1(i&6oL<3X}@`V zk9qy(_sws0bu|dSAAfxweaIv9CvDiD)2ghVfXWP#ki^8%SfOOb7#3j^vu$i2D6!){ zQ)rGkS#%6Z>{_Xm9BK3o`j)kQ z7?fsDqo8y2sJ`>UIk8ti*gLkf_r1PQ_x9fL?FY(wpn1N}YL9*%>}!`+YOQa^|D z9RrJj)@S~vncCa6cj}(_J0JNw7yR8BZn5!5#=R71xyydXf6dRe-0NOw-MJ9hmEoWJ zT9&+xUya@z&AqiddnEgAuKoSIci%H#OUAbf;gP|oR9L4tiPy&9Fd*;$!QeE~iYNpO zS%{X{OMqv!eodX@(qV+i7R|o5C|1NKoqOSvoNM`3Vr`0%IKX(F?W6hZTFh_PO658j zUwTx6h~y>V!^( z&|6C=y&4V(N9eK$T@j&Im(cYRdMyFg&9qK0CTRp=qnQMtVKfxMXAh)rel0$26B%fP%Rdo3HwwI9rTM;0lVNfTWN zpA=Q~szRg+Fw+EL66!EOZ3acqG?3UENwq1>tVO93V?&n#;!HCWKx1nGP;#sTY^MqA zhS!Y1l}0Gha?DJku#&P*0>Ig1tiCRqyXt6s712CZN2{qKT5Z+Qyj4W2D~nd5n&Np$ z^_O}OvXWIXwZ)25P}*3@mu4ynByF8^&_AkgIAwuMkX3=;%PE;)>F6>=+42AgeY9vW znNl_3A{ImqZo3HeK_MI!i5Q05q6%>(5fQ|MB$#FiMHBF~FvgOwYhb9%PUp@+avaxp zSB4EM2~Cs}rPxXW3#nuhldz~_7>_0}@P*u3ov)c9%YE7NlHOCrppqPsHNE-V<^!Ew z-50iQ>k01Y`(Vr7&!^M-hR5~6Dk7*!9G1m+Y0-o}a`cX(t3^=od=e($-Gn8`_I!x~ z4VMTDPe`N<+)UatTq+hxI9j4a;J^;h8ZJzTLezC>Fln9eIy7jTbVE$_ZxGkfvxY#% z1teACLP)(QZ=TGx?aX_30kzF;y|q8*6_(cK#KnU3qW`m(4z{lTr3?8RznZ!^HQPEj zl=tnh)Va2g^WIZSzJ@ocn&$YtFIe9)fqnY;(@HDaUUz33oJDYw)2EeLjRjMolO*sYt0ft$RbE z%PBE#X}s_x)8z0Z)}o43NLprs+CY!1ot_G(rIK-MIO8%r*gB!-CuELbCMZJhmMQ49 zR#gx;&?48c!q#%Fv*8s4#hmnl7OM{AYBc*-+RU04REJg&6!#9lpoL`twUrLjqKOlz z1r+y=WV_~_^QRwrvi*;CjJ%+IrujcC)C%*VQwh2ZH+?w5gRuZMPXucx%$FqTqEj{V zusP{%v`KT5xsX@