From 09efe00ddeaa45bb9c7b5038dccc81bb1d95f0d7 Mon Sep 17 00:00:00 2001 From: NianBroken Date: Tue, 30 Jan 2024 16:15:12 +0800 Subject: [PATCH] Added a time ordering and explained what the Apache-2.0 license means. --- README.md | 5 +++ __pycache__/pushplus.cpython-312.pyc | Bin 880 -> 0 bytes __pycache__/zfn_api.cpython-312.pyc | Bin 66040 -> 0 bytes firstrun.txt | 1 - grade.txt | 1 - main.py | 55 ++++++++++++++++----------- old_grade.txt | 1 - 7 files changed, 38 insertions(+), 25 deletions(-) delete mode 100644 __pycache__/pushplus.cpython-312.pyc delete mode 100644 __pycache__/zfn_api.cpython-312.pyc delete mode 100644 firstrun.txt delete mode 100644 grade.txt delete mode 100644 old_grade.txt diff --git a/README.md b/README.md index 4fd6f1f..65a360c 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ 1. 显示成绩提交时间(成绩在何时被录入进教务系统) 2. 显示成绩提交人姓名(成绩被谁录入进教务系统) + 3. 成绩信息按时间排序(最新的成绩在最上方) ## 使用方法 @@ -74,6 +75,10 @@ _若你看不懂上述使用方法,你可以查看[详细使用方法](https:/ _若是第一次运行程序,上述步骤会执行两遍_ +## 许可证 + +该项目采用Apache-2.0许可证。简单来说,你可以自由使用、修改和分享该项目的代码,但前提是在其派生作品中必须保留原始许可证和版权信息,并且必须以相同的许可证发布所有修改过的代码。 + ## 特别感谢 [openschoolcn/zfn_api](https://github.com/openschoolcn/zfn_api "openschoolcn/zfn_api") diff --git a/__pycache__/pushplus.cpython-312.pyc b/__pycache__/pushplus.cpython-312.pyc deleted file mode 100644 index 8d898cb98c5eb48716c505302a9c5c4d3c2bfb91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 880 zcmZ8f&rcIU6rTOn-Li#Zhyf%-Q%`$CiMWuq!&{=BW-DS)|pvro84p& zUV5rGdhoze0|$=&4_-Dy*EGK_wn&DAh6f{hPny> zzonBvy%7DJ5W4^ZsMJ7VXqAF8@YR9})sLW{H5EtuBMb7Sq)vK<7@8RUzk+rF6Ffxq za#k`Yv#$Uu`{G;@k=QBHLNx@T0=3Utq%(6E0ibFnYGgw_sjS+g*+fD8z)0ee0aMVd zC{c=yC-Le;qDD5HD6}TUvk|>qp|1* zwCvXcx+uw|$b*i?4Tg7+CrpLa5I0NMW5{DIBVcbA9ykiOkXOR6;%&DwE5q2rR?|nV z$)fMqDy1T;V9%{m>^UmeVUZQNSw=;O2zAn2#gv=KdtV{gL&OMUE7MCB*ky1@BE zw~Xt^C4uK5;x;hZaSKmZ%BZxnS;C^^iZ^yn1G5J4@}QPw?2D`)TKn?A(|2o}D|k z@5QSp+4eP2aVqIOf%zS*)QOQIK+e6aZQzLMnEergY-e zR2@fDtW;E;L{#NkbetE;1ar| zL^rQ5@B7}Bc=qj{dvMNwKfg#wFstxPOW7WgpQTNocidR9jSB&X-kO?nMp%UadBF5|`Igs!~m;J>SMi@_Uo}l3SC7QHpOS zzOlX4&PJWmn!**drgDX?Y4~%PFe|N2uBg?;6}P5qRBoHw`MAdI>{oZG+^Nr(NWEpa zofGQEw!1UBSBeuH_1$T1hg34loyC>9kja$^qf;ZLoKjk|(L;_qrTd;}T`|<%B8H+q zS8-9z$GA$a>iO!6T0YjOYRz}&cW;T76hmlV)4f%UMSXX+*pldDp49YD9JgAv#Ie4^WFplq>Zjm+BYTG2o)HAi?%_`N zps#D7-|N>kt*Wghw}E#X{koN_mNB=!)~~OtT~)_>ELO+I;58zzZdD_B4XapQBcBJ4 z5*zuv<*RBbwtQ6s?=@0mEBFemPkkM_qeRxLepxN60FSzbM-|9J^<{Od>Ki-7`6J&V zL_WEKAL1#MTSXgZtLBKRRf|7em+CNnLSI&6yVQJHh0Rh6*TCuE8aX{&6Ia2-xy_sb ze@1uw;W*CpWqqqfOgpUO%wN{ECUEg6o5)$oNt_jV$zl%b*-+0e z#R4Wgug|brl zh!@G?1&9~R;)RHp$l^tam&)SBh?mLYB_ri!Rgt)s-Y$2)uTwZy*!RYPsfx$nC;u-} zPpL*V-NH63tOn*`>l9K)Rc%uK0%bKmYLh+UW{FzDcCK2e2dpt!X{m(;`q0fQtrz=S zpfrwXS=(_^X;rrr7SmKJp9oCI$E@l$MoWkxSxITUz9cbsRMjn?XCaw0$VOrk%igh; zQC5qAK~(dOwM?>F^o`l$bBdwvbTJh5yR)KUF(j^1d_}96hPO)*!%-ip+0mF7;>>Fh zdDI?_Mjaku$K2HlYq&h2aO>TT<6_qmS@ct-eCgRiU4 zJuu|EMa$fuIqW;qThlvmq^rN}h}(DHP)Bc9=MMKs^-*76uRl$e>t%&ldc@GvKIrQ_ z+8#07?>_AIxIO-(y9WGSy}j)K_`;9d26Qw!EP%w|Q`|*L}d< zv7^gZ(^$Wvx_)_X>5i@YcI~Xp?d|Gu=WcO#_6(HewjA{g^to#qmsi(TFI%~+p}J{B z?%wvp?Vc{7mfyVJ>-JPNAHnY6f7It5_SMi(E8Ee27v2M<_pu?j*XNDshkRYV-iVcRA8sG&^|c*!w{vcfH)4Ab?bK3(on_l;X3b#{QUf7X!%74;7RW`jRs(f#c5BGB4M~YtGxDbz&aXYUcBU+p zv4(Yg)sb`R#K{x0j>e#)G2~dmy2&p-UwsaPf6DTNW#UlKm@^lrN;s~b)2mDgloqx) zKhkPU<~g$}VUtFdoWhbnjZ>v&&88FvQwl>V#c0tK&M8D|rYB7A88gF<>~Y=KEuUb< zRGreng9xo2ihptt8$a+w^_bSA!bX9l*r!`wPsl_`X`_#pN2ebg<9UsU*No{# zb=}fd9&L@&GKgHy=?JqtquHzS(Mo3zYDkBZm=?t+#`GH1s2&H5a6orUn_;vpXB2bC z;ud&sX@iW`>Q0S@#gMq^ju{qcM|u9z#QIVH^UYtkbRlU#!Vx zoH6qAQlRoxiuv8uVkqhtsyv`=jcPp_F0)_FWsN0q*`rDHB|9~TRM?ZEwQHlb#E=Zc zTqdSP{qBZnSPc1=i=o3>^qr|z`BsW4-K)e<)ED0fv=bedBO4b%i|j!wE5?%VwiWiK zxp>n&ylMVu(z7bAK=uns7Qf50s&8w>-nhcCt8*0^QBjBzIt|ZnZ`pPHv?U6y^GMTEUf0=P-%I&8&7`egCBk6f+nKt9N^p$ zZJ+mu-(1k?^&IvM^tk&Y`bXP)hX9K74RAxfL*9tdJv=zjPoSHrtAB9FS1{u5i>Lsh zn4)#GBS-rpn!dg=EgM2a$F=*~*+4#v8!Yg34SLxyZhm9>#`w$EC%%4T{F~P=edXrV zy|FmJG{Gh!l0-0N%a8&qoj!yo?HjZ;6A4U$i|^?%dQx6)`Xy?pD>zy9H+ zXa4oaPk#8d?_U4Tw{ARt?)rCL{O||gz5djt5C8NhHzqIfU-Q;CPJejm(#=dE3~c(F`7o=m?OH=-Pcgk1%-vtJ}D) zPM?Qxw}`IW3m8}H^?4#TcYmj6WYE_pPH#jvIDiZ~t|M`T6)kUwm^zj>pd779fWiGf zthh)V=Vl2ynsyH%;t|6>9v6z(?&l%yO(KCTV&F@ABG&DD@7=wTRo&$A40s}m%@}1@ z$B@s>$4x#@d#Agjy|X7`8uWDa``UmkL`+gsWp)o8uO9lnd)866@%?T$*Y>E}({&hN zG=Tj!T00RfH_+)>%L)tvhZDee;CCo6IMe~GA-a-0yQrL*M2%KI;%5dff1%NUQJ(`;9p)?RaD zoEkYfa%$}4SlE_wD)D6EwC#>m7N$s zdI<)Qo_I4c`3df8hXI-=I4~4P-jpktRx!RMj8J*dQ8m8xsx|p!{lphS_JWYLa9V>Q zUMnb>EocfBG+lPSzT(}jp@RJZTP`Z+SB5jP!|CN88Fbmn6XrRKDl6~ow$t0r?moRc zoZ>vS`{ZsyOm?2$8Fm#2p*fQ(tKt)tJ}Y^`^r=PVa80_-W}nUurIk)--*==>Ha$Hy zp}T5NoA5ooa!T`;>%)$UY2T%h3nLf55Ok~xmsSQE?+@ne4LJ9P3rl8nFPmO8y%ZnJ zSQAKD6V53(J92ttHm5e2Q#+fpGMKY6l(Tw5_YDi?c>0moy8?Um&+d6RxaZ-(rbmK~ zwt%heT6*^Q4q-~qR-LZG)Xmy*gSOo1!b_DGDqq*VV|l}Z$;&9kuu%l^yF)@|!lZ=`G@?`MU{??(GKjyKGmR!F;fo@i#UOq&IGYS3%$l1jC@MbC3;*zM^sFt&l&n2JHj3tgH z%6l8hB>pa!s$3uVNE+cIfV(B4Yd4+bF%O_t;yr^qEJB%pwWBo@h^xL_u?Zz|rxNDj zlkg4+)|Rl1#jpnkYrACQl5hZwx@OGkyW3XMxeVD_lyFi%UPNr2%N(B8PAs2AX+RQD_4>&E&L@vk}e^jZNxQ0IZeZLZaGo@`IhhSaLPIB0+Y^M+dDrrOV>?3DCIXlRCfSd#55X;wdh@4h( zh!b08lR;tx)9@`4OeTY@XxH-Ol0z_-r=6S*avmY46HX+7O_&IwdE7|z(gvptQ6=+G z+VL*mQ4t>VyX4?in>_1DYV3c*f$*4W&RAo5NR1B$?(%_$2S60nrQgi$mE8velcv% zo+>{u zXceR?Kn;K^gxTR1vKpLJfc}u&aVr z2)QWXl-DduO9oB+F&o}#krRHe3RG}~dE+eN2p7mtSRh@ZeoD+z<@Tj>inD>{%jln= zw%dhMolYh8C^1!qQ=RCQQ3_hLh5{VmlOPu*hH7`N(3#Bh<%<#NRHp-uJ&Ke@A&;Hv zX|i$AImjM%s>k{6wiUoEQ7R;0Y~lAY?^KT;i#rjAQ=R#;Q{BagPdvHggUf&O!H<6Q z!E5JkJbuYvJ?tGG9zFtYDg}-oZR;Fv>DhRMB8+Le{z!jc57)PLcU^65Q*9mSOwp5` z*d`tteas;r(Hw2$DL{DXlJJ}Z~+8;`MU|c(=$u+g9!*XJZT{^dgTsZw4DQD=$#i z^6mpc`@Vo>-~3~DlbT`ZEkXOnE0&Fakb}4F_Jeoddk0zr4?Yw+@Nls7;h_DIUs)bu z2X7k=UV`=}n{68nsyE7(!F@9`kKA?5MtDCpI5!t+f11~9hWB=rk=(|@%{khixzq^% zEJqJ_-dRg09Xo6PE5Pvob=Hb|>C(>HE){spTBY-rlX#ztowOTO4<7>uRWB1W(n}*D z#3JU2p1@;qvO3a9pg0nV60z93jT!E`J?S)Gv_0^LK?yR@M*XB$2Y5ztY|@GUzh;Te zk}_N*(N4G|0oqFjC4|w5Mj^V%=q5TYh4&R9w^VUe2`y;2w0=N>T%;E@taAdD;FtUbzAAG+gCbQ&DD&WxLN@h zl<+wv+)cm*>$qhyoGV%*S6s_cKZ@BYQFE1WJD-HZNw{Ez*j~3pwG~sqGZ2Cd7p#|! zOOgy>xL`sQzq>;#4P2v-$gk{)avSF1f>~n;ClY`QGGB%ZF8B1K+C0qfh)2Nv4tgo5 zg!y>}P)P~f^9)i302!6XLyi}Y-@c*vK zKDhiX$cg-y$G&7XU;o~hZv535$R>Pn`RVIl2gdsR^@%6Z43D>d@RQddydlf_3sB5~ z$x^pZz0BjY|N4`^;s<*EX^4Mdpe%Ot#jk((gG-1p2?PvnhzPkip7`30Ge4rLQ;$~kZr=CKr%*ZqEM^HIp zI=gz^5zF9F$g;Hc5A}7pAr>&$?tz#A@Mu1+clSZ~I$|3f=EY}CB?nPQ5wba+Sy@G``wYBKeJaG8%MkZG7jl}V#Az|U?`XDntk9omJ8p|+_&k_c!-6S~C=IiqH zx|zTcEu62OB@vZx|LLvM6ZrI=O*G`(c?(ut+p;AsE>KLF_?7s%5@R>nEFs2oE$C+) zrB!&oK+zU*Hj*<6r_8lVAOtYn9>&GcQ@cyyN$`Y+M4mBm zf@*(}97c0U9CY_{UHwPec&Y=mx_aBFPtP6{iD*e6gf>gh;}q5LBIPK1jFCT(K=LGR zIo)QZV{XCFHK&`iV2YhGOQZpuGq z{ycN;E`>jqMykll8Q%>lgR@Pio2GV$GU{hDRt7UxhB8(|5+I>+!f-V`bMnBmkPsnJ zg+RsXQ2Lq)!v|^3NypPYvuVY_wBkU?rcm1E*|Z(Ov>lOM}kR zK-sR4bN8%sZ_v3nrB4ls6yy1#{9SYT6jQfy%YPtaaBi%9Ki!R4$>!M|N{++HbX%q~uStRp6gN zwrAJLUE!1ipU_NC=)iEAC;0=q7L)p!@0C`}jJ&%q=(-Dp)gHupwBmAylyOW0g6z zVbX9lAKb6!DrWPS1@o5$>RUqj8z&7PWM)que|E=gW@Rw5GElW6l(};@b5AgHPbhP5 zIJ@8@tvag^zf4yqWM;B*Ka_cZie%&UY8oaJA+F`Dm`g>Ub7`v7 z44MLbfZXcYoVs96-AqL&XI&tNX1{9LwY-{{_+Z|eYdKZ7M#5B!N1R5%)NVj0pG5%uOnI?__OT2`}hy?rqQp>zd8*uBN7?g86bdSf@v&{F&-7zhTQ~6#5^E~sgziS5HnXP2^t|)flc^)qJ&Hv zMh!{=IGmNC!+Op}Dg;cyMPm1%hQt<&4o`f$F(X)yM$RtAmB=H~yrc-kD5wbVy`XIc zQi50>1R0Z(+6N~Qnn0j1d-V{^aS832IXy!K8Bu3cjAbxnQa!5ok$ft9pf(~f!$!>; zRZqotLZ`Y@^DrUwB=(ghmW%qFLE-vZZH4!hPy%8-e@GuSD4VT~xZI!Hana z+V-$eH9`^n;r3prtTs_t3+Auq>nzmn?Tn~v%S;jNaDN}1V|@`rn->Q{=h29!pZhF@ zjcOM}*n6wJM+c6#3=H-AK1-9Ob`E(6D~d4Z#PiF`As14UJsNjA0$b$_-*#NczccOC^|tv}*{ z(rd)(9qQ=oV#=<-B!TcI5!%}}aJY?S_;8Ar#YORS&$np^e?>#kqix9lLlJhE z8`Rg5Hh*H$Tg_mPTU4p8aTA!+6MLRGKAH5y7shqrRM+I5zdZDWXKLfP?gL(MUXY)M zJlxgf)NgR7x=waI-7~c@m{uA}E(;fyg^SC=1w|A{aRAJ;na6c=X*H%pYGPqaQgagL zJ=Haz2Y;Nfv#N?q&hJ0B zf4b?pws2nl`P6f%Q;$BE6)q?|-*~QZI_sOoBGj{*lpncsH%ep@ZyZ_Mb?Ec;F?b#RD|3GNZfne!@p#9*lEC(68{}9;y zL@IfsqB&{vdexh2m%)9jwgm1^o!R6rZ(g~1RpQTT%!vGKm7d)7&TX06cU;Y8c<&Y& z$*n5f=Ft8;NsaK&9eTL)G_{F}$3SyZ@xL=@E|a#?0^kN%&S@A(uH`{;*|EAf0Iq{% zx1NE`aTr0&(=CDI(F{oUD@*3-k**+{hg3SsVxH&q64)F!8m9zqb8!OL3`=92iGj_M zM&4Cf?1JV0jH zKoiUa^z}{6kJsC)3b0a)|_Zi|>p!SRCNCi3hhQ)DKSq;5K!s zxD;jX5-0JYpN6#l0%at00A-vDl#w{bD3iWGnGA8HD3ggbp@0M|P*Vc^Wi4c*1qt1V zex(IkxDCw57;@2q5~85UhvOswUp9vP1$vXpqL%{nQV<=V7`jtUSucePlr55#DMl|v zV%t&wPBmpMlq^uTR92>Jfie=m6YpEGKpBY#i856Sl&O~WRkNh;TPxNSee_bdq!uLG zbI}$~YG5nvIflr=rh?*cvtBG6{nb5;J&K{$^y7?qxCXI2P{dTeWv=mzfk^_8BxcML zMWe^e+;VOOQ0^uf5@|XvqLT;#os^J1B~(v9Cs%T-XlD}8$!HA)9;q))9FCH{yb^lo zlh8m3ootlaST2U5zPP6XoiuQ(W#b|whdm6PjQ8DbD{Hv5vU5+8GhpbX@YdYAvG^15 z;KDLrhEA@RX-|K6>F;h%f9=C_(}GZLVNVAzzhN(VjQ_QxV?IlESzTkD=NyL2ur{c@ ze2>EC$$5bs`fNh9_|2&6bGIS*X4tN?%{~xxZB;swT}>b*v+tph^D(UVkBEXWW_I%(2Gui zH40HZmG?%p{!Zwlvn)Qr>LxvW#&&FjD!v=TJ$l&7IwS3KF9v%IG5ugKG?}5x&mod@ zl+Y#Uxb#828XQdMUjvr|Pq8y%p;miG+E|H*&VO_m+Qz;C9|)IxlGcwDgSWef<|Gn# z%-7R-#0%+Kl4A3WkP}5ienQc|gA+-B4!EZsJu)RFR%!%CbY01 zu9g*pt1TTv^Sn;)VS)XnBmHfMdk5NmUe6npWaqlPnA{QJ6M94~=_B5{U% zUbxvpxSLqTZx@(`^2C?asQe;8;dy++9ihaX<65v!VsN;tP<(E9dgOWg^uCL(ptT<8 zm}WJhW4u1l*>$Jag>8$WW0~b(r(`CM?<6Ir%vozm&{{HGf5loYN1O;9duTSbIG9=- zN-lvK(;W~pN5QP4H0US|Im*Ykl58{-kfx09*~{dOUUTG3#RVNDvyKYjW78W$j=Hcj zcPb4m#93!0(6Z@$At$(RB5rnY>S!>lCgiG}D_3O~v&g@dr2)Nx;-MQ zHm60(HD}ILl8CX*>5&4yiwjsFL)}uITRmr>G^5H@G}V6Iea=0-<+=Vj6Q!9|uDq$j z+5Gxoe*H}I%bQ-@bh+@Q9ijYt=He+EYGP#gYTdbYGkGr;y;yWv|59bBVEtSIWhSaz zIa9jX+@@e|)8(YsQeR2E?0YpMl)GupO4&A*3&`jBP3JaE7e2RRE{W2BYL-r?%$BVV zmaV?r{Mx2hHoac>>W)y^);T+6r>J0hi+_`$=Q8I~DJ_jg&7B`OH!#!wvin8%Y3cMzdFPAH6-~!IS2dSGX_?W6fz-}rQChajRXM$f z;jB#;+vaj8Ef?x;FienmA#vu|%R?^?U4G!Du~6xzxjf3uSGkI(eCJP`J0TlMNy{e% z$oyDK->6cxW~2JGHLt9B*A!ZP|F84*&a?|7F@Cq^O5Wa&R%S7Dc#SG8eKxf!m|8V` zIF#BrzM02-qv&xxTKoOSm8$%G>fe28{NuusAHq-mmFA?KF4ddy%g9|<1oy4NHE@5L zySaF$HSrg5sfhd{!?`oX_KW%qgnwx@lk0NsUatLReX|+f->)~q{Rczg?mF#1RH!Lj zr-wUFWZsF+7{dJ5OGTK~cNEf$^1C$u(W-2m_IaIz8fzh_t$;j(+qMGREX<{m8E%Fe zCt)_&gBral=a>$tv5qr|@x??GIkSKo6L*d8MG}H%tw{8Gu{AD{jmyQsq&Iqz z@)zxewam&(g4Nv$2soD{_QK4*={N~}UaWORu-y)1oe1lA6!TM}`D1ZxWD=r$r;!2a zP~f>mmBX0vI3?6~@vmltY6Br53Mj7#L_>L@6{rUpUXXKq`PWoNbu}mpE^h1tQh;&P zO!y1Ogv+}~K~sUJic|%157w{qqCiSgLVd;Yl5sf# zftEd-OK%!g)T6d&yy6PsTs<3^>G*gEPK)otb1j9EGOpyuXp6X#*hOL=P9jbQT z63a;l_G&Sun|@3&kN8^yf*l9T3J1jT0t`Q-hZVionqifGE^T3`;L~a5#5fKT`dva!Huo^B8KgU4sJZSdsoEB z0(+35Ik-6zx1;4?E5iC+%?DeyM>N|vmYI0c!ewgD1U#L`@*@x%=MhfE)%$zOHHvni zBXN*G9`d*&roQ%JoEr_}2$}sm#8Z-e?vHI09Y}K7qWE-4_!QZD=jtGc>*d9NcTl6Rlf%${8`YclC2mlMc1ji)-r`4D8oJLj zb0bD5Dz`z*yq^y-6=kNk%%?&Am*w(m-pS%Xq94(t1Iiw;#=MY6k5rGAoEXXgL9}wp zz&zT3IC1l617hND(VF);o;F}l7r4D)%XSD;rkKZ#z=u*Ygw#OBu1~ZYN}Y?_dYiDZ zb3R*Ej5#vEpe60-IHny9ioinl=B~p0S}EB*3pq;1x4v(6OzOUNV%C};wC0oTx5O*f z<#PRKvJBT0$gGA`X2@DQvw>w7T-X|D+!CtXI$OCbSh*`yd2i5hU%+$@rM zdP27QA$pmR^HH42o-w%=Z0p(N>R@v9^zl&g3fL=iWzD)8gRaKFa%RGMJ5;h~v)2c+ z*S~IjC*h5RQ1{8&#d9|~-4Z+-oQ10@7t8f5yR*_Q%UQxJU z*-Qgj*mDI7T7bG2S55Cb_waACtcB@7?(_2JT&n6ChRZizd?;L2ekt`r>hz-*v%*z% zmmazBh(K#7esx!CYVp_*NvI4oJ&A8RrEPYw3ev`@5n{f`V8j5^RXUz+vzA6KB* z?>{l2$nQRFm`4owAFm?ciJ$okpa#^b-c&6kx4shYTe%xk;JwpOva`bcZbr+Boy94? zOg19&%k+3;{IXb2;fgp4*E#P^)c$>Zvl-q$IE>`x6y9sn{-ain@IRXLaOV*PNb-dd z1uWoPFNur3B%;6_2?$ydG#=C5v8+xitGi=ay;N3z$FkBDAka?7zR5oTrUlejOd&sd zNyixDw!?l+>_6DTJ7XC$np9B^%aTQREppLa2|$P4JjftG9F+u4IqOma#d8@Tn^~el-AZIOam~ZhCSO`2i!4@Ju*=T>HgX`dlZ(A08E$5KX9l=Q~OQbBeu9ZltlGLUb`6*tZ9d@&UDW#kvE4T1a;tx*^) zDTbm}LAxb62r&=jm-1*>4E;OA<&!~viH=Jm1~KwWn(uDK<%#^F7e_OiCZ3>7zCmam z#u_pI!2C%94|ROa&iGM z{)VXdg1uKF40)a=2T+hIlIo>fo!WRi^_bO8Osbp1h)z=x8qpAu(+haY&1dTT&(t-a zsUPxd9(srulNq2Qd2pl!8M6X0?YEJAXv5^o%hxJO-bVR}F7=p_OAxUqbGH55(uC~e zFl{{5Xb;93ON?P;od+o6067QAIYbT^H-c$d2X8u#QDh#)Z!BUa+RSn2i4O>2G6c{$ z60uPFVb~8KstaF=|5@-f9LnL#h-+Su$tNTKZLH;Z7UY)+Z>Eltd7%zIPv}-C$oHGT zYDpb4G7;-c&$RO+e7@9a3MPaoW4L;NJ1i3pAxL6A2}p|Zaw3f8C6axpvfm+-6_ICb z!+Gj0!(jq>5j%uI&aOSZHc-AhWWRUZcr`T>TICO)emGFMCzN{sxLKBPe<*b?5~7!U z?G8Ea9k<9zYzw7sM~P^oTSNA3Xf#@7Z^*H4+;T0gC~Qv+r)P#UvV{LxIpLhVuq%W9 zJJZ7{u8&*^OjjU#KyB(!U(GB0&i>~G)3%pWf)#5+Me9O&>)%}&bnYMD7EUjKZGBtD zB_bU>1rv4{jO!?OeIg2V>nQ) z*!IM>r*=QFJ8VlAdrr*_JMzVdG>n9dPgRD5M96ex2nO&naM7rh?#7cQcu!ke`-_NQ)RbLgsqO#_0Wr6!&@T`WmE^P)$cnqChrY7 zD`%Z`L1$gaSwEpCBgUJcU>~q814YSMgU=5A`>e$AT@c8TkAB`O7mDwH+jOU>l3b+Q zK5Huq+KQ&SW|Bj;hW{hUdD1aypX>-F<%wY~lvKcn)28g9q#~GvOt3*{2X-2v??P53 zui8M+JezPjVagk_L03d>KvIZJ9fP0}YB~yGOwy4!z6BydX<4V*PPPd`D?0-ZJQTD) z9I!k*-+1Fz-gx8Ypnb~~%a%WgHV1xDvfCM$)#L;3wLTnpq%G9?C&AJ`3EJC#Woc*H z939Z+xCgt>n-v?h_ZF*uTC)u9+xeRl;QgYur4img7CZ0PY6GffGrXY1NN!5uo^{$_ zlbXWo^l+H~;ymSQVx=?M(~qzjEs6GYXSz>RAO*_TxXCU?0UI*@`cW;Up5tWjp``bL zbb~BiQocsIaa4_)pG>1_&P-4w-S&jkcv)%5njzAmBLO#&v%-ZkGu&k6+L;S$zeq`A zVFz=a%ylt0ow*szO@dwEOfKt;_PgpagGt3@b2*@K7=c?5$Px1>>Yxy2uYmE97y)t= z#1fS8mgjRNx(_HuO4uK6p$EhRQ5$AGEk+B)w5S$}891<+ljQUl)j}y2=ssXWgJF$3 z5ILyEVovA^*}I(+qBkhd3AOTh=ENeqwZO9YyK)umZ6!JX#okuH_|2STYizO7V+maK zXaYYguqc-nvpf(TOXO;}TF|HJ1bbw}A7sxWwyBqK_0*<-DMo7$<1gm%Ws3>jxnd~l zD`BHP3Ez|$^^yRD61FMQLcplc=Ne?=lCV&QDO!DZ+e#z1T=pB5?0PaxQFv=^g>d5p z^JSP~6EhUW1KPZ>Gl5?jJ-}aTI=aat{(S%NG4J6XKaV*fbH0H5-lLuOafexER4$&E zQvV*Nj)}%YT)e-p^D}kTEdYtouZ8e91jcpUN8p+Odb?pB$<3kEFxSVBF~0$F<6Jcq zesw<2kXwj$azdcn>o>6i2y}Y>8g2TGe0;b=$QkbG@cZLgA}}u$6VgfcTqq1|OGqT) z_K1cXDbora3?CNidV84IyROF%q>Qkgh<-Oy0mvu#|1J?N+$6@VW zilC2BSCuq5HE<&F1D-CrW;&{8oG{o$C=qUQBaBzL=!{`20y0DRiID4AK@ByL^EkEZ zhO@|>8w?8(rPXi4LgX1&2n!*_ePAI`q~kUWVoS)rb=(+EOCOJ)r;0qMNwt{)=1#z} z4no%~N#Cfad%WiKhygfENEYG-iUT^dPxvMdPc~0-Q+rMyooo%H02HGvTw|5;jlGi@ zq12+ecuKHP*&TBU6i%e@hB+&RZMg4h;?cPz3McbnJB3sDa4Ln)1K`Sbz`7pk1u;f#Dp@_$^0IOO%K zD_{!jT2|52@jzw`fPLXQHe78cM>GI}-wyev<8m(1)4|g8#mS7hK zKVOEsB={Kyia0H&i=KE<&ZH9bB%ZdMUe1q%h#YSDfUdCynrNmmUhrE%JhnR?mr`8 z0^cGkSp8knV2)F4Rk|O%OZ{CnL_y1Su;x1!hug*-&=PmbL_Xt~nCGIv@|hMPV(7VR$6Ov2@3 zuMNF2^!fv@j)iQy=Cmk``&3l$065a6Dl%g$CZzrjrgNf~sQwWcTcM@<*6KoccF1}=Gl`jTlE zQMiJ?G~^Dgr7p3xJaI)YP%n*35&IW`#RW=AreJ&pcW4vBYq4$Kv5xEZI#~a7XvaJY zj83|OM0yKlts~{NAZdDuweL9IOoj0(w=D@aaoJ}QnfB4cg7J?Wx`dg_Y#5X?A2gX5R%5gZ?04@=)rs$AX+BZ zH+uQ|w;p?fC!Yy6J({2~)Kla45BH4tJ3!EEMd*;fqvhzp07Mx!@_H{kges~YEo-cA ztXmePXO?L|wCo|fi{u@nYj>C7MPun=i^H7~vu-O;~^Btu4W8wzd_#m_L@tLW# zx_tdZTt!(8vwk?tRDV7*)KGF+jprZGFAQt+^bV5&4pj7bBl?kHKRjLcFb68Cw}-%I ze;4e5=)A)n-LT~MGF3A2*Y=UcM05!qB_csa%!1iON_d6d>F>$;|M&{+gYBJNz7g0` zboaVDeQr*;tibb6REVI|h;d+$;LP@37$0ee*^mAsn4Bn0?(lyx46Jc9g;?FSan8{qHl_@jAT)gR?czg))#y|MuQqnCm3F9Ug+)c?*WTZje=` zvqR=5mjs8G-JN+3;iK@-IE=jT-zXLkCu)TxbAbR4i>J`|#44f<6@P{d9FNW1P7wJs zjPN<9TM0_u)npf48w@^l*hY#u_QdfPGBA+^xdvD$Pdd3`a?i=txB)mT7x(=g`hk6B z-%GBb9Vsz3J7R4o3Vdg1==}G$*>Npub>rDA&@8iy|E(YyYA7)DkUp0q8boY-?xApD z5wl}a`rN&uZNx8x^6JGfOiElWDLd~!=bx#3UHy*!4gKqf-%1FT><-+wCs=&{)xzTQ z+s|#E_6r&&X|Jvg6>fXCE?BVZYJSPI`jY;Fewv$UzL*%wUm@%2D%4Z>%p)_$LZvH1 zg{!VsR8JqfG<0ET=D_9lP|ZD|ist!d84tgd5XxHzEQ43Cnc4I5{ulROUjEX_eedl*7&z1# z+W%l+-$Q}h?rGePW&WiN#%+mYl7ifIxp3dg-jut|WPW#@8Ihlx^yDTwcT{M9UfOJi z_n#Y#fJj8gcoT0ww~x?jTM=G=S{7 zv%Uc7!&*BPRbo7Yoo_kd)*8T6x3c$9fWwK`3xb>dPIJv5Esj5QJl@bWJLj%Ggf1Ut)o`O z8J4UmjM)|_Az4fqOOnm8gdL8WWT_HPN#l5Ot?thBhv3-v|AKp0O0!6@n>??hvW4Vv>frPvxY! zzr)I>@8TGBDD8)w{JSWZxYKu${~~VtF2FL&_&1chQK5VFoxfbE^y_lok;+sim32Y5 z%g#*smh+~3A>0MCnjE|04+2(|2v^eAM;N9wId(lC!qo^@3+Z$@UyTs1MYvW7*CAXd zgqI<_ObFK_TrY$hWUEy!Le?ltmy3`sM_qnZuHaWC#?pkeCZWBR2(J{vtGGhsuIAP} ztsYBX!kTrWtkRmLHi&H)^W1UGW{hSiSwsF5Inxa867o5+ii_676yCv$Jn4(e%Z0^0>KH24{(Hg6wCB=}B$S&+rvP9IqPRxz^ zzI(*5BqZ4)rgU!Zb4%WT41d@s+4@V3G{hg4w>+u^(82PcpvmS)mNPI_6PhA_)Ah|vkStgIv zixCSeHr&(WZv)YhV$0g(v3fD)Phm!p9wZH?wIxTpIL_UVHyFX-c|%Hd$}_wO?KYxC zcM+r5121XtT{H+|MFw#YagYEV_QT+Ck9QE4;xG%&{zm1#?rZn>7U|F55L0dYaL0iz z-_aeNM+JJbB88a{^N67XGf7hvH++nYM@0<&k;5#((BIAVA;mL9<+QN(j56Nd4othQ z6IPeWXmm%n=RtfF&qMTO7-1Oc2Jsu{dU`r~B0A4;$glo6E78r~HKM7j_52ytdyx&n z*Eh)9UiOdB5ZHaELnQ4YEu5P_{wA))z5di!Z$0zc^&fptP#1iJnrI{E`zY-B6AHDH z(?Jd+Rx=`Xug6UZhsikt2NX^sN_)B~p@$rzMtgcG^a_O-8G3@EedP3$BT=29e;7kp zR``wbyUu+LR*M6J`U7*(C!3omrXk9HTe(z=_1Q z57Nc15k1V7bq(@{qrOR%cEE|~J!Vk$8TS;L|O_ z?~aefV~YXZx!;E?sUlWkqmdHS9vBoCI}=l*J3=I$v?2uqRT0={ zvXpo-ZY5Tbtevr}6nR0hFI=9B9*9xH0&F*-tEpHG1BIYp95F&8SO}qnkVzpvQw;GJ zCb7veGrA%_1?p~@yi5`1Qck8{Ff5a$;oA}npwE+~nV0kDM7eJOTJ@M}F7B`fYKb2> zAaW~^?(d@uN)yMoGMSOH+fHvgyX*8WnF8WGl`yD*WxkRdgCVO~^%J8ZdtnH2y~$Us6;PSG&@y8QRj!?_+z_nX z5Q4cS$EJX7)BEMP$F(_BzG1d}Yp{H4sC@gcvv*AG`PQ*O_Kxv;;h?RF^&xA))Uhkp zQr3x3GwdSsRmXxQD`!jY36|Uwa5j%`yOy2_3E+&Z@tyDI+<du`Q-!{<~ zv=oL*mMt7BZJ60}!HSaoK}%71k=Q>M;bP+Tp`v>}R%sKUa+nu(l+HS;f(|k??P!E; zFK5}TvpVP`Lt)Mp6Z)$q<nN_)kXGczt@M2cbiWQVNi^Pzi&KQqt zVMQ^kPZL!cS%Ivo*{o&3tYx9}dhwf-)(0B4he~(MmhK6b?g^FdrI%_9*b2jridjcZ z&`~oJ7jmqimx97&ZO~ae;|Mud;-$)~rrj6ICoE_767%Vbt%P2x5yMYNo3&&HEt!)K zy=N)^G)^V`6aqO9;3Y}HaenH4Ar;bDDb6TcYfh8oObpvxlPjkV1v6^qw1{4V>9(?| zt-(X?a65GZU4 zrmviHQBJz7sSHZUlqFFNSk&{+X4uPbkS`_D_ zRx6C~r_W`8)jBnN?m-#vQ)I3F!P%@A<7f5|n>D{;x^t#z#&OvYsJthb-yCI*{$ZG{ zpSlu=or-t-NN;EC)KbPy-5j{@fuQ|Bz;fXCAK$A}c_PbAu=P_3QLlmgX z54?Bq!N5ZghYmgxIM5cjO^3Q0fXSDdiw~vH&DC(<%&dg_mdQzOp6QTT_f~ldh1cIp zNg-#m9^QLd8}koY+_&1QI!RYth~q$zx`Qu|NEY6@5C;qrIB zFx-Hl1%v{0%BeH)7!KpYE`z&7xlRK(j`GX%;&8>CMy^gWsuyVkGHE19F9&Tz)KBqeAvWu-)2U78BCQR3t*qylXcsHQLh$XPyz3Uu@yfK+^? zm`9}Q;O+pPn@X4Gv0lJ|al{lxR4k9%m2sQ)Xgp_Mg3>Qk)T!;eQu<93`&N?a?9LT) zqkhz$w?xk(=$$=EY98X7fSzTB+I)0em?^1}QsBckoWyXks7h?1B z1O?48f0QiY`5IxPr^sO#{R>o=X6$aP6cNpGh!~UnkYn-r-$b)y2t1=-{D$ZkLahbS z_EZ_#zLSOoy1a_VvC}C;Z7h7vuAXx57Q;^9F>K-o^TdxHX-2+HX@3QWH}J!YUPa=0 zpGPargxvB8OyEm~Izk*}KI+J$hzUY<9zXP_2(n%CQkQ|5?EMRj1E^t2t!c0Nsw-E5 z`R@hb%XBX11HRWXa$&#(@RK9`1KcDFD3dOfB`+g;(n|=?<& z6-5p|Tk%m&62l=1Rq5GhU8h}VV^lw5?cBtxNbfU_jRA@ne-ORTaB2=y5lt;-YM0a5 zucrm=TLYG@^KF-`glXgH?4Z5rilylfVz~rU8)LboeCsdm@9z0U+PlU8up9gRzp~uV z443SM;gS{jq+i-l)v{9cX6-V#Zxy7HyVAKiP5V=Ovl-soIYx3z3O6Tde-^Js_-9Fa zxSg~p#fMH#c3LJc{j}8MW*7Nsse|&PMz-&0#eGMX7Cqy1ka&*6xplW%5DV!*P#X$z z2}o6tYLZCj6%)D@R2;ht#oVYLHLob0hLSvm zl5s`ZX=uP{7#&xo*d{v-&Az*BW&UX>T?RZ)cHA{)K4E63A^dr#A+4?JPkj?weu`(J zZ>Wn-MP6oHk%oT`4e+-?>O8N~j!qPH+2Oa8(~d~MxNE`tnZA@nz;!xayrN8ziM(#Ho*)gI0%=(Nm=0Q#5+*mQ=S*}4Nn^)#?t8_HiFHiUK*FT3gX2DsL#h$; zan-Q)km|U)EPjYIf_bLemiwAL|AH9L`c|?{N|=$~#<<$vEoolzuhYF=?DiIvpQMF2rpi_O$WszyH{vO4-F$(3rx?O+e@-`U z8sAY5?dWCk9)iGlTe>m7=okb%`eS~UDhg%_u+Pwz z;B)seiv|46#nLTF>?f`D9rb!bRL(@~TgH6#(#9bH7wkvviANECy6gwd!x(L1YcJ4` z`yWy7G1awr>x6ICQ5(en_*$qtooYJSGzqh@MFDW0!8~miTiQQv0!>=?Bv)Yy8+!(q<5OfE&OhfIh&LpOv(=>7GOU} zOqwYCS{HT}{G^@X#-?98S5A8-^Us!?E;*ZXI_Foe@_=*Y_%=9UdnWX;)&wj$zyDaP za;^H^oK9_WzHfJY<|RDf%`#m}y6VlUyp~kmTZwT9zm=*dH(k?`t(~U`BO#Sv!i3E` zlBHj+(yvH7$gut;6jcd5l;tY?K1ZeBzVxfm%W5c~o3dP`_N2pCYA?=5kSBYTP*2(6 zu8$fGkfp{&Q>ER;AZt_U?g8DXK`LvMjacEA9aWJhh4{UyG7S^)x_;@E>zBTAbL#Pq zcCUMR1LSoOzD0eNnVDgaNSwRBlWuc2c69Z(dpoUdMe&r>qw)89HRTDkCkR};{7P^I1H?Q~jfQNgFeuG~_ ziN{pn(%RD|I-f2*Rdcc?lw2@wxQbi6Y`H;O?suHCc@4olu*^ewD?+xWas6UhiAhiO zJ<)fjWlBHgd3N{nEi?KV&&A!L#MR^4t7)!NJtupna8r0Ft!6y_YLaUeoOem z>fKO5HgtJ8Sj6LXO(6pHf6|T?$CA8W>Rr(7^t^$v-zMy1fNQ+&HeA#94>WUm$a+lm z&(>6IOc?u9C!RR*o;4?Ica85Nxryap`$E8&e*62-@0GpJIs~Hc!>Jiasvglq)gF}I z006EqJ9rn}ZqJu#fZE#XTEDis?l4|0jxJDy7A*m2(wi~G+WBvGgDQ%5$+!1*9qDi5 zOZ}Q&t^m2x%f%;6?EmWeu-$ppn)(g*qqgMBHLHtsjL6B;f%Q28?{(7MO+*V0zLQ0%Q*$M~i9J@AkZn+2lzG zB)0jP`UF(7qv$>T^w@73_fFDM@?1dzz+c>m5HW)c;qfs`ND(7s&sfMytAPDj`Q!2? zqSA3G%1{YMCaFCC@AOT&P>8;XgHA$g(o_B?{9t--4Oy$kb>UR!sYgye@|~7x-SnOd zhUa$9)CCJ0f~k!&?ZMQhaWi1jQ|nHy`%b|WH(ht`$a9r5NkK^B*l|mJ(7qhj6_Yb3 zaHdTTPj&~aWdUQ^?O#?ps-`gxap5lI%SN~2g}>&!9QHNle`j%>0C3aF^bT?7H?Mct zsTso;>(r?6H>N$#ej@X~-MkNXhCUXF`XN>NaGsAS^#eFwT1WJm_^%W~Orrgh2pX6O zUN4!3x=G(>E3y~*K36kxzhj@;H=TFxz;l_;duJLht6yAkarAO~ux5QIAOoNTv4|5{z-tQA2z z-dV(>ooQuzCz(yB-TuCF^#pZEW;6Yx_m6YWJ+FJtx%YhMd!6r-4#PURejTjl#W9TN zOK?lrxWge5;OG4(?CSr6US$#t{|>$S<@Y>CW;RFnpOG9TzJGtxPLuY(N&e=^w$S6p zm7`w)&c*vn(|?Dg@0*$Wi`VG-uKk?88gp6KJ@so$~QMK zqsk4x8di7r+4bI*tL6pdOw^p`*)ULZea7sI%e>vbk_)E-b5{JlbEJB-<%60))#fX; zV%7G*jD{(hJZG_o3lZ-iqH?Rz?LR5wW4>RNcklj1K!|}(3j>|@v?wGH zODc2M6+X2`<BE#68zhtImeMB{ zFI>InsU;Pso~Ycz;xW%wR2YZ$~+V0R_BXN)9!hcaq|BV1n$Enp&77XyfoIDiyyFmFk zL&mPQ)D$SIC=bDLISy2G9056%K#51uZb^ZMIg)}R8|eiq@OdRz%igD^)+L_O zT?ld}N_Q70@sr}-j1n%jwW#ByX2DYe+76|n_V`wf)LvdQHgA0}+uB!mBZapc)mV?n zW%|eDL0vJJ(K#BI8o*9xaGgA}&eM2RTMR7Q;o~kG3Cv#RYq<*TNK3wFnVZ-}fLxxI zfo(4JgxN|8ACGyD4ebu(+eoRyG0Y7e2^5t7uW>7Bzt#>_1gr}twHY(B;6evlBI&BZ zBTh-yq#53mA~L;N!(gG%h%b_YOA_E=0I`$-#QR`?ToM3DQeAM!(h7m%fG(XUl6$}@ z(Dx*<3J7Bot4QQr)VRv>1kWdy69X_1=775?%z-x-fF@en;D;B*N&QF%a#WPdGj zAP6Gj0ZClb!%IDKV9xe*CHE-y7PK4(V0dZtLT(C>6ZEkZU`tR%5vZ4}L>p%(3(e`< zNCA4R4VIGB27CUKZKQxl)&@&SYJ)vf8vvdPQl>jA?>~<5XJGzQ1X59g3ZkhpeM1)= z7~4G?#~91zx9xRyRN8L;-7_~YpN31sux!~`_OIY)BY*5$zIPB8vj1b{^0kAO2^uS`+NX#_wd=#Zj+&GheFXIx&KbixRRkR8 zqyvt03>2a_*e`Z=I`%os2tw8|2zkR~9xNCrAV9WV5!9Ih$g(xA3;?p+LeJ9kYlhZ% ze+VaBeVuOM#qR4yvl|5Lz=pGG&%>`6 zf<~*S#Va3b#bKSG(c~@}P7|Dv3N+)=M`XA`2j4p9E3+n> z+$xx|BPN+X%hl4iA!yC@$Ol>{O3UBVzpMAPfM~Xlm981(MoT_bUQv9e^>W^lx0L?I zM_{PfUp>+?%6(uT-S^>P^n`oEex>vNC2;J9)XOu?S(D5Yn*#lD zWkh7uEvw9Eb?N^wwE(^S!;}$8PSTnBR8gzgpizFNtF7JuN}aad*cC@NiP1)s`Uy^e ztHT~S?qE;!D0;b*Nt8RhNdcuxC_96*kMAU1gzVXsNqI?>TTh(l4!RzUD6}C#9>94q8}ZnH~D)HoqS00L#`67Vuj^yi!f zZ06Rb!SMMH!q5Hu=IbBayxabx7A@C(o1x^O98r9oQI7w~f7 zKQV1=6*D1u_~JV^MtX0IyqNNICjRtce{vo@CGtl4lJn^43{y^uRSus!msEf~odHN- zCr3%v0NRr+ai*mjSKkpnL>6qaJN9)lCXX~(68We>-{b6h5{t)Jf#kSlBQ0K%y+acR z4oZwybtUc%2s}IeS{qT6ScG*R&Qs#9KdT3q9u(wq_PF}Y(=H`@Jaf{egqsxa+~Jb9 z$_Cc>3WGY6yS8sLn1U^DIR>8cJ#qhph?-{}NN{4&!bEe*Gf(?fGw!9gh&pEI#cnK% zK^YiNayy5g6hAs`(qQSFrfoIxnF z*I!7#JH0bjuZO26DJ{yfS%@;qG-X&?w9I;xVKwh+howc!G(yZy0Q#;g!6*Ym3UC4o zFQXgO+$lx>v#@azUs#FdWY1)bE{-7$l0YLmF7%vBU*pHob{KmPx*+8Au7{yS5N#ud zccNc3%2TRD3kixZ-N^`YcPD)f$vR6^a|K%%U9q{gYog#;H_IrR%j$fW(d z%~`s3nDw|ca~3W8E#@q_)w}0R%KJ8RcK=q`oPli!_B;vt%8XqNm_$u%+qrq>dElX8 zcR#TW5ng;3p+u|G*5U3av$mJszxkREY8YX+EBwJf+d>kwX|*gE0x7jg^t!vX8%O8)4-Ika69>TqlLIsNpffb z>$wM7W82DK(2nvI+QN>aky-N~CNi2_Je(NI!iWYO1_{zoHb<<$) zt)IxFH-O<+?|V$FSU<{(6`Mv+itsm_*BC_JfuXG7Qr~LPRx{En+BS?nD%!RO^0rS{ zipMSUM9VyH>*tn=h#9@WIZ}PLyRmOe-^NHTy8HV)BE-ATtoJmE+G20XRqdRhxzM%a zI*y+n!=da$=N1hw378g6%Zk+5u3Ct_pvbWhI$IQh2G=7Zgx_`8EMHwpd;-rwuwL`U z(lsM>V(9~;1!C#8fO&hs(BOZ#DPU;25k0?t0&K`Kv25)~lUPQc`_^@bgA|~uk4k&hR(PX9~ zr-(dN< zGMR@iYD`38#nH$BTO|~A7h1RrrldHV=_i=7A2q;)i|TG=kXi(e0PPgbOZ~c~*K_j+ zy9c_x6+WeJ*JWKGw+0Tx!G!AxXp6kuRc#3?>zn^B93fZxb=ASVx$xI#80N%0o3CfI z_VQnj9uuoJi-s+J)s}m|A@!Dh!YFF3GPxU?JsUnLSwW49Z zU$t?RM{w^T;y>aKk_S;@m#6z7q1ec!72w6yUSe2Ue0ai442bPjzw3Ple~c23DT8dn zds7BUR&ctlNj!!m?Svs3>H=w~OIMHVyu1h_CG7;8XYP61kj?vOpkQIZQ0Z4~9qmML z?|4BWNFVJdY`paI6Fwr5lJ0TLlOFwC)5~h82h|x)3M1d~&9&G~yD)f2%kn{cmWlkKm1@IH_~X zU#x-D<%uQmm7f*w`{7Pz_VWMV}!rSiFP zK3Nl3FhSLf`EOSH4f9!DC|tvgL4>F3&KY>2OKXw6s-C4d&&^U?EUM*XpK^v;v*Oci z4k47P7=+nW#<4@O;rBiYzwlvMDeQ(dx3wH?ZEg-}nwyWd+q>Xav^k_}Za&u4azx4z znEDLkjLpV-1cDv{4N*8v!6^!es17OjwznS<{)wLdje=~ecvBxMlLBR+G zpHcA76!D!lzW7_%s3`U=k`uqFjN*4g#^)1R~7^LZ}3S zfC8;~$ubmurgy=9rmPZHCl<^?#CaOo&&q-(bMKa5wxxIL#LSXuSuQ_wYUy^4ubFyM zzKq|^O&#Lq@Xg%R7Oqx~`{X8NJ;y)BdG(k5MGlJ$*G)^2 zsZH`mjvCu9e@M>n@8 z<{Z?J7rkK-9}2L@NYk_wiR|L5`6g~cZ;Y@AP!3COB$Lvhrf)Py)GP`^B9@4jMWKtI z9nrIB7NXMz7CphuM-}g~h>Y&O=zRn)rspf>X?CC5$yxYx9|K222Wv2-gAuYLj=hykiBmf8g1tc|{0nM@GCNKl>uMEF3bYXk4^co{hG3?ErcGFY zHiSxQNZ~vQ7uW6J>Qg$A#jH~y?GdO@?rU#9?0}>cGXeFmlMog}qr|}rDNuxgw~)F+ zXl*{y4yVi^6-9|17*e*wI9*8D(b5T1X)TbfP=wnb;*SeZ%7?F+uA?2KB20V8-j&Pk ztxN?O&2ufy{Xh5o`q< zcTJ|hCNo@s$x? zO6&J^j}&I<<-O{!XK%A|Ig>I9BTrVylsZ>;K#~8Ya>g~K;hNHPO__B~sh=>E_tpnB z*510Hp|H0eOI&9P>P-=Yj5m^KA*XjUNZj7d(8AH0yjuUPs)53hhp&{5X_|WLCNi_d z%mR2sq!T_kaK9>Gseq(bYjN)qfto4<+PM?Cv%FR@x71btg(=6qcksZ#fx-5HcJJYU zb?JzC^!S)*M+94JrN3z>-ZPjvkm=EQl;<@=8nl*IF=kx&H8$JI-=%J3⪙ zDhzVvxfO$|0oAJ-7$rMjK2+YfHAoJyMSZb%?p6K#iC8M86Hc;MkLhLvbrx6M%k_Qr z{af&h@H2yY}EaG0P; qn#6CuR?dn{jzj+eU{=Mm(Qy&R9wm8>+>?N6!P_RGyex!lr%s9 diff --git a/firstrun.txt b/firstrun.txt deleted file mode 100644 index 02e4a84..0000000 --- a/firstrun.txt +++ /dev/null @@ -1 +0,0 @@ -false \ No newline at end of file diff --git a/grade.txt b/grade.txt deleted file mode 100644 index 1c54530..0000000 --- a/grade.txt +++ /dev/null @@ -1 +0,0 @@ -3dbd9ebe6bedfc298fc13986f1da5291 \ No newline at end of file diff --git a/main.py b/main.py index a2a5e7a..47f688b 100644 --- a/main.py +++ b/main.py @@ -6,7 +6,7 @@ from pprint import pprint from zfn_api import Client from pushplus import send_message -# 教务系统的URL、用户名和密码 +# 从环境变量获取教务系统的URL、用户名和密码 url = os.environ.get("URL") username = os.environ.get("USERNAME") password = os.environ.get("PASSWORD") @@ -14,21 +14,20 @@ password = os.environ.get("PASSWORD") # 定义一个md5加密的封装函数 def md5_encrypt(string): - # 将字符串转换为字节 byte_string = string.encode() - # 创建一个MD5对象 md5_object = hashlib.md5(byte_string) - # 返回MD5加密后的十六进制字符串 return md5_object.hexdigest() # 初始化相关变量 -cookies = {} # 初始化cookies为空字典 +cookies = {} base_url = url raspisanie = [] ignore_type = [] detail_category_type = [] timeout = 5 + +# 创建教务系统客户端对象 stu = Client( cookies=cookies, base_url=base_url, @@ -40,24 +39,28 @@ stu = Client( # 如果cookies为空字典,则进行登录 if not cookies: - lgn = stu.login(username, password) - if lgn["code"] == 1001: - verify_data = lgn["data"] - # 将验证码保存为图片文件 + login_result = stu.login(username, password) + + if login_result["code"] == 1001: + # 如果需要验证码,获取验证码并进行登录 + verify_data = login_result["data"] with open(os.path.abspath("kaptcha.png"), "wb") as pic: pic.write(base64.b64decode(verify_data.pop("kaptcha_pic"))) verify_data["kaptcha"] = input("输入验证码:") - ret = stu.login_with_kaptcha(**verify_data) - if ret["code"] != 1000: - pprint(ret) + login_result = stu.login_with_kaptcha(**verify_data) + + if login_result["code"] != 1000: + pprint(login_result) sys.exit() - pprint(ret) - elif lgn["code"] != 1000: - pprint(lgn) + pprint(login_result) + + elif login_result["code"] != 1000: + pprint(login_result) sys.exit() # 获取个人信息 info = stu.get_info()["data"] + # 整合个人信息 integrate_info = ( f"个人信息:\n" f"学号:{info['sid']}\n" f"班级:{info['class_name']}\n" f"姓名:{info['name']}" @@ -73,14 +76,15 @@ if not os.path.exists(firstrun_file_path): # 第一次运行则运行两遍,否则运行一遍 run_count = 2 if open(firstrun_file_path).read() == "true" else 1 + for _ in range(run_count): # 如果grade.txt文件不存在,创建文件 if not os.path.exists("grade.txt"): open("grade.txt", "w").close() # 清空old_grade.txt文件内容 - with open("old_grade.txt", "w"): - pass + with open("old_grade.txt", "w") as old_grade_file: + old_grade_file.truncate() # 将grade.txt文件中的内容写入到old_grade.txt文件内。 with open("grade.txt", "r") as grade_file, open( @@ -89,13 +93,20 @@ for _ in range(run_count): old_grade_file.write(grade_file.read()) # 清空grade.txt文件内容 - with open("grade.txt", "w"): - pass + with open("grade.txt", "w") as grade_file: + grade_file.truncate() - # 将下列代码输出的所有内容都写入到grade.txt文件内。 - integrated_grade_info = "成绩信息:" + # 获取成绩信息 grade = stu.get_grade(2023)["data"]["courses"] - for course in grade: + + # 按照提交时间降序排序 + sorted_grade = sorted(grade, key=lambda x: x["submission_time"], reverse=True) + + # 初始化输出成绩信息字符串 + integrated_grade_info = "成绩信息:" + + # 遍历前8条按时间降序排序后的成绩列表 + for i, course in enumerate(sorted_grade[:8]): # 整合成绩信息 integrated_grade_info += ( f"\n课程ID: {course['course_id']}\n" diff --git a/old_grade.txt b/old_grade.txt deleted file mode 100644 index 1c54530..0000000 --- a/old_grade.txt +++ /dev/null @@ -1 +0,0 @@ -3dbd9ebe6bedfc298fc13986f1da5291 \ No newline at end of file