From 0ed7e9e6399a0c4e049042ac681d373b0b5dc316 Mon Sep 17 00:00:00 2001 From: 86150 <86150@hunnu.edu.cn> Date: Thu, 28 May 2026 19:49:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0project?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...02506050230-焦妍-期末实验报告.docx | Bin 0 -> 1285932 bytes project/java-cli/.DS_Store | Bin 0 -> 6148 bytes project/java-cli/.gitignore | 4 + project/java-cli/README.md | 17 +++ project/java-cli/pom.xml | 69 ++++++++++ project/java-cli/src/.DS_Store | Bin 0 -> 6148 bytes project/java-cli/src/main/.DS_Store | Bin 0 -> 6148 bytes project/java-cli/src/main/java/.DS_Store | Bin 0 -> 6148 bytes project/java-cli/src/main/java/com/.DS_Store | Bin 0 -> 6148 bytes .../src/main/java/com/example/.DS_Store | Bin 0 -> 6148 bytes .../java/com/example/datacollect/Main.java | 31 +++++ .../datacollect/command/AnalyzeCommand.java | 130 ++++++++++++++++++ .../example/datacollect/command/Command.java | 15 ++ .../datacollect/command/CrawlCommand.java | 85 ++++++++++++ .../datacollect/command/ExitCommand.java | 55 ++++++++ .../datacollect/command/HelpCommand.java | 61 ++++++++ .../datacollect/command/HistoryCommand.java | 80 +++++++++++ .../datacollect/command/ListCommand.java | 65 +++++++++ .../datacollect/command/SaveCommand.java | 85 ++++++++++++ .../controller/CrawlerController.java | 60 ++++++++ .../exception/CrawlerException.java | 11 ++ .../exception/NetworkException.java | 11 ++ .../datacollect/exception/ParseException.java | 11 ++ .../example/datacollect/model/Article.java | 75 ++++++++++ .../repository/ArticleRepository.java | 52 +++++++ .../datacollect/service/ScraperService.java | 56 ++++++++ .../datacollect/strategy/BlogStrategy.java | 93 +++++++++++++ .../datacollect/strategy/CrawlStrategy.java | 12 ++ .../datacollect/strategy/NewsStrategy.java | 118 ++++++++++++++++ .../datacollect/strategy/StrategyFactory.java | 27 ++++ .../datacollect/strategy/TechStrategy.java | 105 ++++++++++++++ .../example/datacollect/view/ConsoleView.java | 53 +++++++ .../java-cli/src/main/resources/logback.xml | 22 +++ project/java-cli/target/classes/.DS_Store | Bin 0 -> 6148 bytes project/java-cli/target/classes/com/.DS_Store | Bin 0 -> 6148 bytes .../target/classes/com/example/.DS_Store | Bin 0 -> 6148 bytes project/java-cli/target/classes/logback.xml | 22 +++ .../compile/default-compile/createdFiles.lst | 0 .../compile/default-compile/inputFiles.lst | 22 +++ 39 files changed, 1447 insertions(+) create mode 100644 project/202506050230-焦妍-期末实验报告.docx create mode 100644 project/java-cli/.DS_Store create mode 100644 project/java-cli/.gitignore create mode 100644 project/java-cli/README.md create mode 100644 project/java-cli/pom.xml create mode 100644 project/java-cli/src/.DS_Store create mode 100644 project/java-cli/src/main/.DS_Store create mode 100644 project/java-cli/src/main/java/.DS_Store create mode 100644 project/java-cli/src/main/java/com/.DS_Store create mode 100644 project/java-cli/src/main/java/com/example/.DS_Store create mode 100644 project/java-cli/src/main/java/com/example/datacollect/Main.java create mode 100644 project/java-cli/src/main/java/com/example/datacollect/command/AnalyzeCommand.java create mode 100644 project/java-cli/src/main/java/com/example/datacollect/command/Command.java create mode 100644 project/java-cli/src/main/java/com/example/datacollect/command/CrawlCommand.java create mode 100644 project/java-cli/src/main/java/com/example/datacollect/command/ExitCommand.java create mode 100644 project/java-cli/src/main/java/com/example/datacollect/command/HelpCommand.java create mode 100644 project/java-cli/src/main/java/com/example/datacollect/command/HistoryCommand.java create mode 100644 project/java-cli/src/main/java/com/example/datacollect/command/ListCommand.java create mode 100644 project/java-cli/src/main/java/com/example/datacollect/command/SaveCommand.java create mode 100644 project/java-cli/src/main/java/com/example/datacollect/controller/CrawlerController.java create mode 100644 project/java-cli/src/main/java/com/example/datacollect/exception/CrawlerException.java create mode 100644 project/java-cli/src/main/java/com/example/datacollect/exception/NetworkException.java create mode 100644 project/java-cli/src/main/java/com/example/datacollect/exception/ParseException.java create mode 100644 project/java-cli/src/main/java/com/example/datacollect/model/Article.java create mode 100644 project/java-cli/src/main/java/com/example/datacollect/repository/ArticleRepository.java create mode 100644 project/java-cli/src/main/java/com/example/datacollect/service/ScraperService.java create mode 100644 project/java-cli/src/main/java/com/example/datacollect/strategy/BlogStrategy.java create mode 100644 project/java-cli/src/main/java/com/example/datacollect/strategy/CrawlStrategy.java create mode 100644 project/java-cli/src/main/java/com/example/datacollect/strategy/NewsStrategy.java create mode 100644 project/java-cli/src/main/java/com/example/datacollect/strategy/StrategyFactory.java create mode 100644 project/java-cli/src/main/java/com/example/datacollect/strategy/TechStrategy.java create mode 100644 project/java-cli/src/main/java/com/example/datacollect/view/ConsoleView.java create mode 100644 project/java-cli/src/main/resources/logback.xml create mode 100644 project/java-cli/target/classes/.DS_Store create mode 100644 project/java-cli/target/classes/com/.DS_Store create mode 100644 project/java-cli/target/classes/com/example/.DS_Store create mode 100644 project/java-cli/target/classes/logback.xml create mode 100644 project/java-cli/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 project/java-cli/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst diff --git a/project/202506050230-焦妍-期末实验报告.docx b/project/202506050230-焦妍-期末实验报告.docx new file mode 100644 index 0000000000000000000000000000000000000000..eab7b17a970cab370392e5d161d1053239c28026 GIT binary patch literal 1285932 zcmZ^}1CV7)*DYG?vTfUTmu=g&tuCX>Mwe~xvTfToy6k#&&W-QA`~C0U6+2?>m@#wa zoMYt5wQ^)CNP~hw1O0P_$?XaJbN|l;_5H`h-dMrO-ocqc;oA-M+W`5m8|&XN3mae{ zAYTw5AjJRO&CtPt-ow@=E1_5JoDos zCg@~)Ujel*Wpe`W^m$6Be^Gp!?E0jG*((d3OBQ8ej#Y|a`Bd3Am2Q3jA`fR4EBgFC z_-E%H#+Si)lqd%3D=BfKeu*vQV*(h*5T%+N@0j(@d0JNA)+u{{q`96zjETL)7f1ao;Un)rQ(fxr~n zMYMIkLK5moYiK!|+z6umAXe7oFBz~F^;aB+YU0_50u;c550}C)ycLRwdIkQA5k6lO z-bLX_ZDiMrpbLJ$J0$4WBLC{z2CTNvwEu6EAaAs_EHq{ze)rir$Z38syeV_dpQW94vhR8U4e zJW2L)Atm%oy7{nf^mfbb_E<|3B17Y!Kc4 ztVbjTE?`^PyIOUEvkPtcA(s)FUvFUf#c%)V@kf@U9$K$= zrCyCIk|YpBp#!~0>+r;n31*nGHioLVTuU$pU@+Ur$v4_k+`;Z(Z3Q=!Yyc{+l;V_C z(Bzz9Wb=Ye+7Rzf$v|&Sl71)N(3kPo902kMk+}~U7iEHJ14Nh)Q85-Rq85WgOT*cv|!_hAo}bn~KL@y{zF?VBvl77hSzlWck8(r zob+NB8ia~Tp!+2yM-Ogz59mqtrk~D+MYWCj&{)?VKh^MW&SDdp`Tittf%x5m zSVbSu|Hi%U(+wf{8~3Yk+)@4ucUNZ@d)t4IZ%WX&Ut>fa+@`qX5%EKCl+i&>QV`TB zpAlRW5JR$R9+jF^=5EkylErXG?GA6A zQq#~Q+kxn%BEmGn&=n~=7xv#1`>@#QLlj~aJY~h!e+QFu<`(OTFFKj2NqLEkD5k%J z3OF_OG-!^Z)^$aP;Hk{CA38&_Hb48U_Z!1UW5CaGkUOeHyff}f|7+wtPd}o|*gesO zk*Td%Idr3E;vq=+l`!QKxpe8|-0z%?=bQizQ*Z4oq)2Xv?0t=2_Y`>_>+rF?)0U&^ zZAIa&r*2)$FF+I?e_o)c9*55jL-MXa2UcTQ@AA=$-;Zj98v~K(g8dvofQ$?q_(_;S zjQcpet4{Di73W^w=d38+4fGF-|L5rs{F_C0dnc3sG4-J-ZNGSYKUvD zv@v!5hvZ9LY3FrLc;4GIyB%A)0mkmTUUu(J4lW*?_!7+TPPI@$Fp_)G*W5(0&(!Gr ztveOT=Zr7IwhvO(H&&l%!{he_M|d$o5%MYA@ro9FbgdW%OOi&M=Sj1D89ufE za1C?_spoM#w2=Z7U8%5J&6|WIEWFi-V_;9{VD51;UjlJ~IS2@UYc@DT!(>TPj4-<8 zG{y8n3WU}p(62W{Ey5x)dV!qw^~4)wQJufWVlJb$+}eHHb;a$o1mJl}ns!fsey)93 z7`#jkUK;lZd+!D~+Jy}Vxf`TQU+L5(cmCaz=zzTzeo^Y``?B*u6kmGmi@{y?1xf@5 z>4It8k`Elg>!Fa}LpY?Eh}n}oSQ|sgqMTC9Y?F3(xVb6;#T9?`x8psxaT#rv3W6X3 zPt2m|0(3e&lZP`vh#Nboq)}>ry#4q%cZ%!!%jMyedNGay^Hbag>L*<{r+L@gmM(qz zjq}Ua@%r1$A(6-K;m*5Gm*;R+jSW|9KwU0%@S*7Vxjno#j6X2oOVX1#OE!WC-emuZ zavw)AhOY~0MQD#;@Pv;jw@b(2nN24Pzy zgNx36K^)- zsj76RCWlrkgU$8456rc53h4_)N(gg>M&&M_I(!LqQ>@eCLz8O@n@IsFyV|mN*Bn>4 zd}FC>SPXwX)%p&u$B z`YT*_(KteYH3g!xB6~Ih=;JraF~z=0385Z4e6ZEOF`U3=7vU7##c{qNVP5!T(^G?! z#Z{|i5ZWsbOjRO{^1nR3>dlB2sJf_q+foTO9H#fR0i-5OvBGlkA3AU66g*BOcS5ZR z;vSUQ)lj*x$9}Qc5HXVd(;C^-ax;?wloNSz;MRS>h>rSt1pB*}PTq z&V=fe8Dxy!VJXU=9;s5}Xbs=m4FL!7Gn2=dh0zPVvcy#$C5i_3LOHW*iL8mOc<%Jh z*lJpUmSC4W=CCvGhz?!6B5xcI0x(AdmvvOc0j_wdicw)?-p4Srgh3Z{JrVQIdU6qnsDxYfkSdUu+y-8;a z_p5zno5>t68?NZT>Fr{#AYW_{{-oK!Hl*}(GO~LGKlTV#<~E^<*;?9vTON%wq2q9vT6Icl}|%Nt!Dut9r9^I9HfU?Q!m8IVXqbaeg}oY_F@A z)vKMVXnwO~x`5T;iuLWREB0+lROI+J%>_eaO(pker>di{n{?dnRE?KH;WLYQ-Yl6c zbUDNi@lB$sjYEs+)5}7a2R2{nWHc&6Y_)Z`{L|w97xLd;OcvleT+>f}HPhFS+l(-> zA#AlpW$X|cCqdZDif#64JL>~T{z*_t0jiG*|QX z_~a1#J7WF^od7(?Q{F~Qjo!Ng2g@%aKj2WRZs2IB0gV3ZjYyz@TXF6Kl2)^b&$I|L zNY34RzUiUaeQ#QiJ5Tz76u{3GToZe`+`-<%9{BAE3L&6YIS9%{KCcl{|KO@0w+X4K z&qd-s=%nwYa?mr$e$yLgYVfU^o-xlMd(zJ>{1{T?$0V99uf{A}n#+m&9hZRsg)#|aV0v~yJwg&uC zVYZ#?1X;?A1+lw^?diChwsK`yhO5zhvgqOuefpC4^wX(`P`g}GU-bZK1wGB4thSCDodXtKz?Z&T7j zyU46=+2V7H)GRkr)mL@|Wo=r0ppD1>rxDcI;a#tau*z zg3T%9tX_#qnml~Sq5YF}TrFP`3Zcq2sr`Px-T_=3*wvWoO#vS!1)19H6p*B%?jA-Al>S}kMR zMtUXr@@=r&hx}bd!{>Uki$|f#aRYh{gezW(kaDS~?UZ7&3Yy5ivcBUC3jN9=HJIXl zp;nm=q3zHk6$3K-XCXCZ(f%pDssXh5d}NxA(%8NV)uGMH6=-1AX|BAO{*KNJ` ztHLWHd_7saWSJ^1mauMiFig8a6`0_=zK094cKk8Z{ihjgXnFBr&oA_vnI7#jE_K~h z{_$m1v9jIsJfWt>l=D1AbRFiCYpUiwIVq0Tvdy5DU-bf=)Er7;1&ODtg?1$1?|4t@ z1J2?==E|DOV^sPXwt_FGN=ouCi{)BNXm-mCGPYn|M7cjL(2xgdJAZLfDiysa)VfT2 zTDpkqCP1~;tl7eK@PDEg?-`uGww{dZZ3%_erBI}j$uGeo9}jFwvEYtrWXR`fU78nj zDkg$rh;=Fpu%V2}fK}T}alq3?D~qE{(?(I?-w#Lz={E*=-;q$bEY~3p`K@BqFOaXQ zH{=!SiY}>$Q@y_?m5Pcf*uPha>&hydZG>H#C&6Frp}TjjXNtNlD6CFS;zU9rdWN)qK>bq1lofiZ24Rf1G{ z;dq^T%m?Td*V)N!*0mJWGiEUN2vz*4PHwj=rP%HRel7V?V8xui;m?MLFDA7jxf`M?lGs-fv29PQvr>1y%-}mmCTe&}qCQw9qe1^184@rKtkaF-coIXj zgAuE8umu8%lm?qaI(T;9k&@Sg0Oh)RbL@k{ZSbPmkXt`bonKsx4FK7haVm5x?S-fyVQZY{KwYDZbjR zIxOmOalmvG@g7#QXBO&b458k88&VON48{y+#c^c36ZDj(n0DjqJMivPBB2w@zPew& zZ+WAEUL4q^lSTRu)N+P`zt1o7ApvGl^K6z4e^f|f7@`GTH!Bt97S?< zui~%L#voASA~Y1c>P*@fD^$EZw~^;bgz?%9*H|M*PC)hf!>aFJXNt>arvuycVoXi- zpvh<}vRP&brh9C+XoD#~;KuYKkQX24N_Z?yINDx6$co1A4G>kH>!%8pYbs>$!xI7x%gj|qw>3nx4)$wpb?8)S$#2D(QjOCjEG(rHW|!dDi0B8hlYnDgHCa^ZYH z>inTMrZ{NX$a)goW=~G%L-gBY+g)uD@)IhB)tjPGo-Je{$cW2P32vPu6KMI4JX!J2 z@bk&V{hAH2pHlRyrMYgsC+u`sNeN5;U8$JutO)hN7Mx2E2Uqd{e`F+)MvahfL5JQ4 znD>|4#1pqThCRcCan#oY^^Yr0s%hgk$Ij;^5zbSBo?W-J+neg{LD(~XvAwJSV6`CT z`ycvY8v$2F!2rgrEIFB)<)KImTw%G+l>rygw0RoJ{z5bXVae}LdTQ;-nhPYEA2Id* zn*^O&oTb41WuZ&!gr`*YLx8V8QNXXf$)aC_@ImP3_2^1piNz|>y(kEBen{d~nK*Z7 z>5go$`eAvRX-Z%Q31upv4!2RiftxNmcs^*np7j4)jk6?@^tl8D0?PWVm(|J8Av zO_W63V&nZ_yG47Fh`XzLdwD0M_TrAPAu#d7UfnXvCMv0*0Xkt(iLnMBtgYHY~ z82~#;S#X35UqA_kjm?E1MK%|jKTV~kG#*qJr-BcUns~I2bf*5!eW10MfMRGBn@0?5 z6epBpk;jMg)otT2kVxVAae`R$$FrR}=4ZW4jJ9O5K2kSwHaM!3Q9c`LIE%YZOliy9 zz&=jCbvZ=b*~|+(9a_(Rsa{jOwOi12DWGC6#tfQD-OS>byCSNWsujr#HkQj_MY)v% zn%6H;l!5m0!2(1TI?5BrKc9}MN_kO&-fDk2Tf(+{5)+=v8wsI>TaN{q;e}`@cu8J9 z^Wk>2siLYwTHmQBe+zvJnEDZ^t#Y19bBH$WU?<_f)P@G!W_ZJKjpg7=O^(1#y-8pg zy+q?OPG>66%5#4pL>}oE=G*U}*7*i7LU#V8Y-RiWO)2~rqF4n3R#$7v_1psV>1A(} zuc_gw@yjq;9&*kw+=^INa7BuFT9d*CTwOyjtd$kFkQGGfq0lDd10IOAyZ8*k(k9-} z`XbkkStCIy@zN}ezMj=JeWz!E7cVt3_fF_Q9&wLECQ<8H!J8w#r$PX?tyeOW>Wps+E3-8BYD$9%SC)%mO2uEB%`(mCgx&jUm)(2 zyo_f%CT#iQOl^QkeRfRB=$KV5L&p2CRzn0y%{&se9nu9M4dRh0Ym2jET#KP9kwF4xy5FFW6rfi6bPz>#~0A2Xysx6aY!vdTo?iEel zPQev?)XK~dHV5fiEA%Rx1JeSvAM%L}IL-ADsj^y{d!{#c3PmL_GTvf?Sa!|&S}%gk zWJnV= zgQY7WVFDhT%a4DAKOpJ7Y`iWJ-FJS~w0&Xx_uP=Xw|aU0t<_K52Hx5`8xnPy_5)8Ip zL71+IBe~smEBF>=o-ancmSVw=nd$^Hx%~oGnL2DTJbE%mg$D}^8Lx(Lj-vMzd>cBL zl}N0Xo-8V{S)Q`C8sYWr){2@4d*Dxb%+^RrKBza1e2O9|dkiUhwX^a!ZF%6)qH5S~ zwan4N)g2jMGXXy>iwT*;oC3bn)QH8HN1h}y_nO~^8|^^9SN*HgkP>nC@v)BuZPU$B zID!!&_Km8;M4gy@PuT`5RwG0r&E>t}QZB6~=n6R$CF~2_1V)ZbJVlA_#Dmb~FwN2- zq;Dk9xg@!H=CL#N0lr-QoKruxuEDMdUHWXXnAN-jcu0s`8j2GgubG72Xn3vR+KyZJ zrXzQAI~Qb|WwXVHC}}@H49!7xkR#f}2kq_<{_pZX%zuW4i-oDJ>HpXS@M6wI{P-R} zj(9*oX#ef_uRGJfTLGH#_Bf)b-6VhU#JufMDBLncT+3JLpc*X;2I$TlJ9r-DSlSyh zuqgh*HHnjwiU{JC4n%{3P&Xl`-dci)Dir#GZ%tfOyYD&fCjp_chAr{DdE0Njb@Jbt z*XZ%cVRDlSDP^+m#j_qD$%aktxYc-DvI!{dvi3!l6k$BUkPy!eS5y#0uE=p{Jl@sG}px%mWp10yj1P z0L4aLn5Pbk7V-@1H7+m2hfH5tE{`BFteq82?*x#p&yG^n*YipO>@sD@gS~!gk+9BiZZkWQjlTE9A%L z!8ry3|I@xH+Sm9K!Pon|xgTND^uV8EecsQ9)BR(8zuWa@1il;DfHzf-SaOm4%mc{F zzhJm5l`ScWU7R^03`337b?NYAa&_5*1>FTk5Wdb)SdTke1Ex1IzaDo%yExj8F*^u; z$B*q_dbsh);qJg6R}O}xhMapYql4~2ELu5-HXtz((aaFofL@{q@* zx5Jh|BS=c2&RstP6XADVDV^Q42@Cg<5m36M=A#$uNqIG1o6L(?WRfGM)=dk9H}_9Y z;VtY<96z9Qxx_1=rFlkOBOT2=O^Ui&>4Z=dwe@W~Qez3zG(R6;Szt@XCo zy+xbo6>IO;eEM#ea0JR#Lwm0+w~I^$X}BK?GIz>Mc^3SinS0es&H%eV?aq#unAkga zHTa&)=d!i~nF4_|$N>4KZOxW>+2%=6k?r^F_7L$?`T*7(J&!HGMl&79^K|ou<^!*N zLDs#RMZ1@`F~^|U?>`e8LVf8ZrOjmC_g)1O=+I8awc z2zwX9R0iLerVN5~VHy+iCR7o~##(}dvalY{mONGpX}oD|PC$b$A&@KZ@K<+D`E>rk zNU@nUVP*82GtJhkF;EeIG_a@RaTaHepp-jF@m zJ4*p7v&noZpK2~**!r`wyqB&&D$sF^6Gh3^5NjPXL*27fqujjyk%8@udzF3&IJ30I zaPXG8aHQJ|Ja`R`4hvSIw7j=E%Hrz6cnj)90;!HbT)cEz%m_jFIY9YRUW9CeHZ5=o z!2zy#mAz(TE5kkG>@cx+)p4R8^LSH9zW^1@e7AT@3THxjkoRWNy4~^Wz4|1wn^L{p z@}1vVlmWtFMnA>{OsFLU4fE8?_J>YsnlQ$g5w;t6oPG=POq~E}O)YrTiO1(rv1?zX>l>l1=2%C8BR8moqG_CyhaAF;=X@9|5Ej zeEE*VjGtr_Hd_YIq`l8XJx6^1og&e#w@I^Pnh|?+j*nS@m79KwfD8o?d{Gi*^xI}e zONK&=s^x-*wIz^C@AukbJ*pnJc1sc?i|{yo$Ru34Jh0Em7*6xgHQ+6F&GRPu>OiWL zPqeWk#x42urvnxS)5qNBF@eq>rf1KKNry7Po+T&9?dn7G{2hW}+bqBu-{D^*U*M>jsiI09)>-fiZR1?dVztBFIMaKkIL|2EF6fLf zXhUM3Vi4ec%?ZY8 ziyC5@eH2;)%*xVf8fUqALN*I1@|g$TdyB-#TS(`Osr%$g`T9IaMlD)S~o&iv#DTA7R& zzp}2b4o7=0;|FRkUi{HiQ22IpKu&JI!5h7hec7R(5|b0gqb`qoDTY%>g0~EhB2^p? zK{{^JHSQ<3{2yx6F7ghq%KT*Nn+Mt`SX!9G0#93zA*cPp%eAqFwY%$yPN3|=5mpf%TfpPQ@ph?1E`ppOl%{j+x+;3`gl)!A$DK(0~g#jx%_wk6~dsAwA=z1o-~; z=DNO9$pg_6J-(A(-QU-x7YP5Ed}kNh^&ob1r^GHRcFy@8jplT(&MB6Bs{9K7oA{a% zxvQU+WG(D8c@suW>L*!9;(j2itOQ_VO*xVCa3aCo+MytbLvG6U>{5lau6~4!w3P+T z5gy}1In1%i6`Oh4#pJ0pn~6*7bI2D{J#K89HHrOtg;VqW(tOD|RE@X=z}8x4s2vv6 zoNfc}GCzf#MaRV{)7uYL?-b5#2n2yF*$6EC^-zP3u0Q}dU;w?t-Fj9s?GNT|iH#P=U9KAfE;zV7K<4s8q}#Bz@p zRlvWX5s4j|QlS@VCkV7tQ45tqM#Fh)XIv(^ltb#4b#<%jdMfF@Z0Tg$2iy@@J1;$$ zT3UMjiz=BXDpKr@U>1q#=1O;L$#QZ0mL6XIY0CO0ijB+O_IOE#<0njiXQ+o+xB9$zeMfn=s2dOQT2T}Fq*-t4^gbO|5_kFyAtPoq-sQe1XeuC?Mva98&kLNn? zTgS4hNK!(6se~@E%1mXjSrHy9O?u6gGI*KW(;rvo;>SJ1hkgXG@rIg-yZM{^Hm^yY z)+L(iqBLwtfl4YX@lw3jw}mdPcMfwADX~M!oI>u8Pe$T85EP_C5fE@Ba7T5pcq{Rp z^wO?O_G2%0Vo7L%Xo|gX{iuUqn2K$!r{_W-&gqN{y!g63v#Jd)%Bms z(MEC8M2w*t!-><}Ato~CB0142#jKq8SEEEkqeb?a*P;{<-Ng|te}#I!bZ~uHPgg+F zP)C;UQ3vj9;@!;APOUv0FI{B5zF8mLD;x2)0bMo1pe}b3YZ;*+Nh}I;i-}yr=U3S4 zyA9ct#F6M7BJ-vewlcl-YmrtM5tGAUIt2%|@B~WeA|73Mo_{7!A!Fg%4~THF5A9rG zC(ttuI&sK|HZ4LZPzMJt``pnyR49r(MVd;cph(K~xquGbULpQ1W+hfrSOCK*@zi@0 zA&G?c5fO}r#7KT@Q}T_VXI`Glu;0#*pIWT`bM1o7C}C4B@;#QsO*Otb%?Poh9aJyD70@Q|KzzP*{yHIlG~G3C_e&dY61 z$6ISRq4k9E=XSLa{|TQC9!|pHs>3OqZv@Vkl}{Il0ss)$F*2eZ6QFWyC-qe5#^C7X z^*0Li`!ktETC|zDUfyFK)``67R)N++cOA^fUC(pWm5DoP`Lch7i2VZU&m%Uodg69B z`5dsKC_Zu78#FsG)&_1NZC2vetKnK*X-&Ubqw5ELDNt_j&zyQxiSq>#4SeP;)ClL2 z#iU*>tm9OGov(YJh%S2%1p~Q=e-xZ0Zii8sFlOLixp@ai(Q7X-4N8@+vTqfREQy~? z_+(S(2jesik3PPVmJaOpvUkmN{%L*w*_t;UY7`Oyb%JZjryrbAdDHcHYj!!L{F>qh ze>Vy>2X8sLG<1z`(H!C?LY5vEq7j}&Fb97!xL(hHZ#J`pt$65|%wNNPY&M>pu$ZFe zRz3Z0*3~v9>}p=BX|eS+MK$U9gd5HBX>1Enj_&7Qq9=s$?I=^Y#w1U?^Y;}S$Ky+T4$pcgk7pTyAZ$~-{rqmvcyhM zq=MwLC_tSBA(Q^K3f^r&?A4UuS{LQ24vrK3l`%Inf|z^R-fvRD-spD3YpE*;BO