From ce591fefc7305aa8119a4fafa4a4c9a8cd7d013a Mon Sep 17 00:00:00 2001 From: KoDer Date: Tue, 29 Sep 2026 19:57:41 +0700 Subject: [PATCH] First --- Makefile | 47 ----------------------------------------------- main.d | 9 --------- main.o | Bin 60968 -> 0 bytes 3 files changed, 56 deletions(-) delete mode 100644 Makefile delete mode 100644 main.d delete mode 100644 main.o diff --git a/Makefile b/Makefile deleted file mode 100644 index bfb3cbe..0000000 --- a/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -CXX ?= g++ -CXXFLAGS ?= -O3 -march=native -ffast-math -funroll-loops -std=c++17 -Wall -Wextra -Wno-unused-parameter -LDFLAGS ?= -pthread - -SRC := main.cpp \ - xenith/core/model.cpp \ - xenith/core/backward.cpp \ - xenith/core/trainer.cpp \ - xenith/core/checkpoint.cpp \ - xenith/core/generate.cpp \ - xenith/core/gradcheck.cpp - -OBJ := $(SRC:.cpp=.o) -DEP := $(OBJ:.o=.d) -BIN := bin/xenith - -# Без -include .d make считает ПЕРВУЮ цель в make-файле целью по умолчанию. -# Если первой стоит "-include $(DEP)", сборка молча превращается в no-op: -# ни один .o не пересобирается, и правки исходников не доходят до бинарника. -# Именно так мы потеряли час: gradcheck показывал одни и те же числа -# после нескольких исправлений. Поэтому первая цель здесь — всегда all. -ALL_OBJ := $(OBJ) - -all: $(BIN) -.PHONY: all - -bin: - mkdir -p bin - -$(BIN): $(ALL_OBJ) - @mkdir -p bin - $(CXX) $(ALL_OBJ) -o $@ $(LDFLAGS) - -%.o: %.cpp - $(CXX) $(CXXFLAGS) -MMD -MP -c $< -o $@ - -debug: - $(MAKE) clean - $(MAKE) CXXFLAGS="-O1 -g -std=c++17 -Wall -Wextra -Wno-unused-parameter -fsanitize=address,undefined" \ - LDFLAGS="-pthread -fsanitize=address,undefined" - -clean: - rm -f $(OBJ) $(DEP) $(BIN) - -.PHONY: debug clean - --include $(DEP) diff --git a/main.d b/main.d deleted file mode 100644 index 34cde8f..0000000 --- a/main.d +++ /dev/null @@ -1,9 +0,0 @@ -main.o: main.cpp xenith/core/checkpoint.h xenith/core/model.h \ - xenith/core/tensor.h xenith/core/generate.h xenith/core/train.h \ - xenith/core/gradcheck.h -xenith/core/checkpoint.h: -xenith/core/model.h: -xenith/core/tensor.h: -xenith/core/generate.h: -xenith/core/train.h: -xenith/core/gradcheck.h: diff --git a/main.o b/main.o deleted file mode 100644 index d02cc36443b948e3a1fd885148dc88308fc2cec9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60968 zcmd753w%_?**|_lh@^nofK;QRt~T041rx3bcu63Ev#`;Wi&B+_5Q0e!NlZ3?HwY%t zoGx2wi!E)XrLDHKmKGHdQ838W*4m)8Qhim_wz7?_cqzsk`G22hW_F*P?7_?1-~a9T zib0*7+gH!q?B_&(>O0q7slFW;EX1y4HDPU)TRb)+O+Are$WZb9V z&cJ;t?$dCejyo6kDBQ$zIPNpF`%FB~(r!PVXKVL4cz#K{Gx0oEyU)Y(%i5iVXSQ~a zz;mQ_kH&M1c8}N3JpG)A=f$`SXUz^c@6NQHXKd$VyXB2^JNq5mxi&M^Zu!u+WRxBD z+0Gx~PHH;Kx8;QPBs*MU+2IiUou<^i{c|n5Wq0~Da|^HCWw*T$`dioV+^6jbybpsn z2xk%DKHDj_Y-e`5?K~fJ{;s`BtgbB!R~602^2>zwl_=nGTWCNTduBscIfa`I#UZ} zJ1$Jd zJXg3K&gQP63w>u5Sys^bcS(40I%qVR*`b9UR)q4Yp_nct|Ot)uDG zVD^W>{H|M{u($T~^eo5SW9RQ$c7k)Tt>eZ`V3YwyO%K`mh&D7i7+#cBlK*DV`A3YO z9c}`@*I97z%P7fyGq8f#EMGnh4wCGaGm4z)c;k$*Jh@}41BHs>_^lg zyoHwmz9ln*nba^`gSYTpARr8*9N6LO@$ye!YbV4FhAWZgzxrBFhffJukOq9M&+=O> zUj7-nG7!EsqXfBCigX6T%L_^(Q%g(2i_(Mn`$8v{gs&(KL~cl8mB80u61gfTnExF4 zl;s2>jml@oJc`WeVKQ)S`W3RKAP|`XPRr75;uHv9S!zcb45wxOK;-fqJO7X5vpC0& zEbhhWJ&Ip8;LZxut5-tVnhNK{}J&ThW3@;!$7)MFu z+DwT5a_FQIyh8pZAiG7A*?=-QMh-rgv94LNW_ zlI;XDGn8Q3RFM~p5zBj_p}}x1B56WeV6B?wmdtdSmVbr@Qgx6XJqa<9;!=;Rxb&Ff zKNhix6O{17vcISz@ z!grReA6C3kl|rR=YK}c|YM!rk)&RUkW@VNJBgj*ms_$8NhD%dX&g?L3@Yk91s0K)S z`*7R)U>+HZGKhxZ&BI6W8bq@(&vv4AgxXKQF9jV{sEoPVEw^M=S-#d^!h2hP`~;n& z#;+*+>&#|UMujbZOYyb-ni;$qM2xH8EYAIF(1AakLFb;#c0BjCvX75A8=>}TDTo$8ZuE8N_nF)Q_E+n5qrgM(nyi3emxN(t!>l^*uhL991n9)Y`eAu zBllz;0s$;J=q$+8MiAMQSr2^~^R^?8W;TP!22P==UNwTeP8_ljxsqC!?>+C=0kW(; zZ@u|M?$Kf-ZC@+1Z06vbGTSLToK2al==pFuIuyU&^X2h`tkFK}@GQ=Kf}r(q2DVWW z-~jkSZpXHKvH+8hFYkGOd8^7|XJzJ6;(+*?@f`Tv&n^x+t(ohPLm*n2xe*`%>jBVn zqw(m_9$U3XhwhD3J#L; zpne|G&%;FU0g{snYb1gr+N0ZeWM~fyPo~UbU}a_=6c=<>XBObe9(nL6a_-KwNuyv@ zYCLRskRIm%AayhK9K)~5IF=emyK$^Bj`hZ|)j0MW$3f#bY#iOjk!s?~Fpju=t=UF4 z5YKoLnB-&Y+s4)vGYWXkqr8&_%B43R93<2=P@xgO;0&(?F|R(1tBeh$xFRzgC>V=ZAa`fTVENyE?XaI7j6)^X9jr6gy7`{6*2MNwaEw(9h9f^Fw-CO`| z=h4jd^zOWAM^%N8H-sYpvzzRx)S%f|ZKj&i7NC z-?hB&^L=v^dv9V*n|hC=E3j3SlH0+YVqPu3>)CM;qKef|E#2syd<`X-s*(;8!r7Vo zbkI3QRY@KP4n|I{+VRlhv3eAA&8<)l)-Ro=6*c88o3=0LUA2%)w$sQuc^i);r?CUYqAZK3y={2TzD(OC%pun&Qv#oWI`%p8E&DIHR` z1Nr?gqjwU9?EpBM8DtnWGVxY`LaI(i%)E339=(&=$*^ic&PSZG1yPL$#~oe4bdR#e zcKj1bQt-#<4C!`FYe(CNZg|>kWZOFM?M=jiyIwe+=MLN1wWoVY6k%aSyWCIVb$n+q zvNE$-@d%g9$W9ZohHs zG&5n2Cd@LPAj~mt)GZV%6BcN~JmU$%0_|pkQV_6Xo^jM0N3(IPGLCh|vC%j>jHA;y z4jIQ0Y(L;XJQ=*q z-kt^5=+TXr#hR&GGE29SHwJ~&51oS~%tHm#v$rU7K@wi7kV&f8@A)7dO%o{NO(F(V zWb4*8VjIWzd@!Uaa~As~3^a$m(2lr*T+4VI#N^C8hJuk16iv$!jILe|I{#{iaO^=z ztbl|x2%x$UUGi9P%xEmY=ng-5^iy#7^?%ZE;2!RwV?=-n4;~GuX%0JbE$VLP&Ei}& zcvrIyk-IZHz&6^7ADX}MZ8^DJwMZ<;qnTUbF==oA%g~tAAfAaenFYSq+mX*Dk&<+3 z9EhOADS`jpEMXuY^Ai^%yQmH5V9&Xj@+nR)ab~9mTK4#9Y?xPq_AHqHXyzIa_-)-W@_|+vlo+AXnxC><4O(?%UTB*9h z!R$m%Fg!UgkbNZ3((U)%K`FAsV=~bnpwSeWFV)k?tsv#rEA+%f1ndjB6pX+p*8PZC zpEdyM6@)VLVx1NHf)J>89_yzp2aRJ6@-(P|1t-qR%nN0$nj9Xp4dX!FYz2uZ7``?$ zFVM5EB>S1b&JX*QKJsQ;<%sSEh2X&FMkEv+%WEo^9P}7N7h|1_hMU8n#fU1K>)1HVJ{eYEhJwfLKoleY- z*x^Sxhoke&JP3D2&}Yz$l((J#vaj_AJiVYz5Y`r(7>Su(%bh&e5u~|}F_}UtlP^?7 zDD9yCru5r&zP3{+GbiBu1wF37&R0@U&ZdP24`hu`4-Xrp#ZmoO>he)331oK$c6O(r z6V}jS)NSmX)4`#l-$&=8Fft8uD1QXockYSq(sLK}33?lak5Tny)ES*e9ha89C}YY# zqf0r79vvYLt0JAm0iVE()(3_e=39-FBwZe~Y)`}tMM(9z?3SX;JinocZsIPJ>C|<- zj?Rr?B>E-^AkzgBR15_psN4h>9^ku)Oc%;9>GgzStoh}Q)fHupp@!<(>n8Xs>T2O^ zst8rr)%q7U)GhMYHr3Sls~i2bbs_)a@|x-e6bM&s<&p{h11+7~IyZK1>D+qYw$9D| z&c_b49JuYkN`L30ojW==b#Cr_q;o43AVc4|9aIPIVDgQfn?bwcz@7ec8$rYTIv+!b z9S7PvHv$Ih9i7_`w03Uod=Pw_0p5;~cTV5{iXJ5JplDb45#h$pNBo@+99V&vAMD)W zKX-v2a_s=4&4_tN=K~k|!LSAL;?3WAKcGhrtUS<8LP7q{Z4l?S&W$WFnC$3$hZ{K=Du!2^S3`DE4pO!P0Z1Q@Lbc6EYUf7( zgSb?5i+ z{C4N6&b2`A8t6BPyqGiUQIdevb*cXvaCnUJs&ngHu=oLj-Oa&Pcix9!$T>e>Ld9$} zoJG)LZ+-j0=OH!*lheo{zg8{y#8eL(gy}&EEe9MZfU@!d;&#C4!xQ15@0b*EWo$(p zuoIPy!YB}+x^`h5hhPnn**~PoJPcJP1H}MQHk2=@sH&{E9zs8+BcdEog2Tuu7dKG` zDfO$8vI0ed@(tPnkNK6g6;&h##jY}1hle&*Y1lzYCrv10pu{v&#z2vN*!o7~J>14% z*(46!iG2ET=Q?EU-JN&gN%{08e{MF^2})HAIFDk6NTr-I1_USpkdO*ouTm5<5X$gH zbqgwM$k^jWVL^GQd}L^82*~2Pit_pXvALt*u3R*Kfq&c>xN6F8tZZoXle4O_d;weo zS*%gnaq(GqKzkLq<3~oNk15Kyc&ajpI2uEh^^N|~IXO8hn$d_xWz!}k@DWwZQL=lf zj_MB7Jyhhl@_@H;P=-M@+c@j{isy=4R}Vrb#}{*4Ow2KyNggH~*9_TvqEy$TlCKZ> z&*}UztYj+$My-4fv{CCHm6L;KsB%%gKWAhf4CF^Jk)Ojv)=&`!=UAmyS~$zrg(+5z zQg!?Y)#9j6*dUwPN>Kj*gwdd$=W^DJ*DO})ovJ{=lu#*?_Odw+(nCA~M3b;q1P??+ z4H8-CBUBTE#a7fMF=J5dl&M{=#HC*(n~JikGy4eU!4#&d*s-+=ZZ38a@Vy@?+Qj90 zI~P4qNpnZ#DW=-+<7~OfWSwc%9r#w~1Kvp19y+u(7Ce%O>#R;6NDNAnHWX3tJ~uFA#;QB$U$wTwEX)RWqb||B_H; zuR_YTTjFAhAf~&5<`L{37F9QrMBbmaIKmQISWFlMx^A3*q%3MKJo6ugm2|tA6bbiM z)DWmxAJ9prByn@1`#+rA1i1zb=QrkTwK|3qmcngLrq2X-bQYesrbO~xSP&de;gAX zt5a2ReSN4GSDh*}7@b?tvqYf;Lo!+F35X(~JKIz%(hzAAs>sa{OxkRY{}R$Vnp~BB z46u4dMMYm#I5ZC7(a&dP7pl9yvbIqxgfrE&b#C719(w8+eF0O7LRAgi8H<$$YIsQt zNGBIWP81Kq{HR1WQJgAu4V8^eiz-D4NZ7qXZ%V2WEuE_4s6wDFnm?;>LHQ!|*2+Vb zx(h0*3E4|QmxrrA-Nl(XYle#4OM{3aac0-mN87{;Hq9e zr+ni4i52G%3oa5|H^vkmD|C;kOykii*DDYCCo-4Ds=6g3w6(JwWS3m_%s8#uJsm*v z65L9DhLJZ+L5-ov*3Vslp|oj4_(e4aH1%+yANBpY*A3M3A1+&`Sp~9mGafs4fu^Hj z=4TMcV$+Owrd5STZ7b#AX8)L+>7+vE3{OGP!W<<)TQ{ zYHsuvo>8YYP9ss*D@yua!3?Nk{}VK55^G0pU87T^XO|<}=V1nvF+04yAm-M|G4a5! z^uwN>7@zR=d3ZI!s*KyH#blPrysq!T#{}-;iA30ySw{^x&(5B?9Y8bhx21ipSPRF- z)-jp1)%4`(Bk;pMFKm9y$URDXR=*l>{)|15Sta3x{*wHUgU*N8eflEpB#R?3FEOJ=#>NdC}B0 z_6Ms8U)N^VbhDZDD&EYxv^4jhw3RjJ9JvO&cX_Wb?`B;Uj4Z(pt!rtU*7X^I{C|bc zgI6YnrXeLIQMAR2G)}unVL#_f1xSf9Q_eCNB^Fb zW#{k3f)J*ugW<)P=Kpsv|E&`6_Dy-egm%b&1EKBk<(RU@de#TF^AxQ#s`UlzzJ+0> zHl0QZ%zoQm@d0UO`H65)PTW%4_Vm)P(~PyA|3~772eMxZtiW6}=rZ6SI^W8Z5qpty z1S>x6gJ`A4IgF(U=%LptMKfsO^;9tXsI56X00(inrGMMe8}AKZJ8_1uHJ>>s+YE;5 zX?-b}|4z_(8!JxF@NQ*0ycEe%YZAR>^4<9o_-VOr8Kh)#en(i#@(dCT+2U)X12aWqFq6Yh4G*V0ei?5U$O#^P?a}qzA+n=~$$v*x4`ID=_;HMJ$2?0h@0* z!8r_b`Wmr*JNhBCw2IQ?$ATWbQA%UEjcg9)e@OWePg6Z*5mO*dC)>_JGT2Kvg2DDB z%s;oSW9bM|EL$Wta=aebFqf!RDuvPIh@1Dn*e$naSTIKj_>>1R^D%gdxAg#DSh-@O%+U!9#8!*ZYyN zfxGSR2n(U2)tuSQc(Y3KUkPD(btV$^$KJbkP2xWGga-5c}T8FloFJ;$Y`f(Nv)nA zo{{v$;aHx(uV2b@$w_Y}r@WhN-PRufN+T}u)j>`W?Gyy3c8T`DKg0YJeiXrr%f2NI z{9VMgu#LgkvGtGkAh!R~dgb2!qe!wKbc!Z!7FpCT$yP1^Ns!2-YY0W<@SScu)*e*!e~W)OPiz{loBMm0QFZYN*oeAu_Sycl~zBM)+IKT)TRm8^5!dQpAPTq@nyMz>m!1h^#T=4ZZPh^5IPh*;Bk-Y43PpWe;fR6?6Ma}YpZPY2x)#luL%X-XS z@A}mC%6c(MjoIrA4||P&C4_Ad)UTv1HG`?t!ctLc|H-;>ms&I|`1D9?rrl_!L6ltB zXNc@GR&tGfs${Z#>LQDrltp$IHan$5hCu%Rkb1DvtyQzc=Bfd$6=dX?u@asBkJ zh*9uhaa^7ubrBUD`dlhjp0(YSc<2XTb_K(~;5}K`z!(1QMrzO<{XH{W)}w>dH2FCB+31u=YA_2El9+#qjNV!jX3R}>z4pdg0t(ms6WD88kM z`A$9#UkYOQ&g;XsK=I8>%=eiSyyc}JhOga+Z&e}V zZ@c2#j7I{#G#}!XZxqDvT}5umx1t_X5LLwST39sslzks25v>QJzKGzf8-WUH6(_GPvzId4M_4sk|Ii2vl zzW8L!dqrs?%tikU=2D_Z@Z-WO2ygC-zk@F&qUn9{7Q)xz$HnI)!gKoKKkEkGfgczB zXu?bT;=A4heh5D<`VWr+&*+O!B>Fiqoce6LU}9C^=L`o$gQpe*1;azyQIH;EQ+q9@-9LU}CviTTUdj=zu@qsSBC=McI>>F$Hgan}m1P_8Ye`_5KUjqvLtu=k+Y)7v5gA(6u z;9F&U{*9PpzVUCBVdqUbcF*3!NDLL30y{Fhl!PUZ(wIkN?mWcU^vytccqUCAo)+Mt zL(6U&DcRXCsSd6#54%&8CF6?93j1MPdZ^Nxzjc|5lxkpHI;(^9_}pGJpH zhXl~+t7ZzMt>YTs>JG|?g{!XFio$1crl>tZdS|5Cw}>^x*tVO27Ol%zyrIRStq_*l zH)8R=4-4BiEbOkZXlsO}wjkgD2i`VG8!majAvtO-TAQ+Xp@@I$ty;65gWaK6GPf?d z1S>*nD->3&4&3HH_ogPE`bYSImRer3#QKXhaKwlaVvP(7%2^1K4bevow6H7F@{b%j z(i%}^jlj;XntDi#ABd(_W6YWi7Qkq)X74oX^%|0#H*8tFHgDB5SW6aIw6<-jWoRq5 z7;ME?aIM$^E4$Qck)>BOEi4zsc17?WQ?+1eVFwba%c7+j{!v>%%|0accJ6{pu+P(q z?eVj)4n4oFu~IF(nB^A|yE=qjZB|cD(pRRS3pP7tTe?-3vO3-RPEyJ}>DE7zQaaPE zC;E~5@BLDobn9rpvks?Q&8c_v`)#`Qr-3Vz_M}^XJu&6(bnCZi=feFhAJ{zZD~1zH z`_spic=~GaeDH*n`v+Lt2b|8(v|kKNdFd?cgTaxcSI)FL(!To6S=M@A%I-6*Ekjb^ z4i9}P86KNXPWk(pR_iG*4#3N{v%uyrXOZ{6&PoB$a~APH1oIB198Ow2#Cmr?%Hu<< zNNURKL##amQ-HiWFy$9Rtj&W`emlh4J!sLkA=WQWOnGyNb>zg9mxoxtOCxtrTFSda ztk--*e_MLWiXqmo=-ZMf(#aE_nS2D2o}@3(N2|A{{3eNBme41yZAmFzXIKv>!TBsZ z?;cS6y)&)bQd53>ruEX`dy-x|!`hifFVCf=96iH&CoSbyXIc-ObZ^RvGp&|WQ(id3 z`opQS;JxFtln2hVUOSEO@19Np{&IQ>0*8kaa{urYaP1tP0~}HJzYOs$uB-^vHB6XL zR#Jww&Khh9DJ!q9udG!&qG=t358FUX*pnPP;UkMGgkX3)jr}n}kJC`_c_xnH@U^a> z{$Se+4^wfseZ{}W?5&-I-}ijC%^$!iDI(wgSdiC!gf>oz+Zq!7%DQ?C+nJZnt#!gU;1B66A4z zFux8F*+qXd|Oi6 z(}4B!wOs^^!gl>q$Ag)#R1&`!vtO|!v|R#41)Mj!2COQ{em9WxMxbT4AInZ5Um)C+ zP75{JW_Du{jtO|N#Hqv-(jthuJIhR3V9t!^i^F-vw9+>X69%tz2ONANbLr*bYty?g zcdk9T+s=NfFzLNO_FF~Hv6jDgw;W6L-8L6-mxNC(Yya@>`onnhD%b*BNT#;pdqJ%G|Gl%C3>KsL#*Rr=j20%0oYoiwh9v zFi2l-@r>(mWyV1?wKVyNDWHAounQ--1T&DBwhUs8#py*xb{(D=y#&2J&L-#5Dae|S zrXXuRA}fhD!>8DJe~Ry+TT+iLoZ{S)hP4aeRlw~>4j~h8Est(OHxLtDU4!KuF?Elf zm&~lYSuY$hqW32f6B?W5W3vOFw}hOr&TX9FFDt9BYxHL=sj9~QGJGq+ZQZ5*P*ru~ zh)Wx*Z>r47cKISpXfLH_YBQmCOMI zJY6;wN}K8jn8o0}sX6+Yr=JDC^G*oU*u*QojV^pzb||ge$Da1O=lft1uMGf zOP|2bza?KDzBro>XJ`f)FGEhor^#kXn7&0i1P`o&Q3>H`*vZ71C&aVi!i3{x1?`Wj zFVFCeHhtaQju5oTv^lXFZcj4L)NcYOcC&UzJ8=oA|>f z8=ttYW1lzs@i{9ro9QP(2@Qsoz(IWOeTb>35_}kyx2goc2Nzd@zrn;VEm5JO(qGln zL^aEmZ|$J9Iu;1&Ly|Be+QLHpT77^YDNPFGKkK{gHheWilCA@}tv_!MWIr23#vLLE znS?LduBF3Al)C7wkPi3+lAa6j(%ZgNk_=04tsCINX+gfWO^}QdOLU~HJW5~{g(Qhk z<6VR}l_2zqb0)2|5Q{9!M0Odg;aYrX2mbrP3i)yY zqE#P-;d~#|+sY#dQ7}PUlsSi&NnTngwV9=~kz92JpJ?jSqqoo#528 zg%%-b^}RHh4>@qw0OBtRFL7}nN(*wNv^k_Ji&mCPvj1I@|2JRcAlZOgV>YOVIO2Si1cfS@r zM}794w0q}G%ct5rcpd=?I&R<)BnTqokKjq460=Bf?;QXIt5Xtab*O+&Cc*;QYR<~o zN+yvo2P7IIyzFaznp;A3t^vNOi;b_00YX+kjcDrWYr2hyD7LcHH5cO!obiQ^Qy1ae z)Pc#$Y}=XUR`eJ!7zy8<*^Kwz1*aR7TyWZ6f(u1Dxv-r+Q@vGn9&naIOEJE1g9H@T z4iCN?TpQkidkp1jbX>B_-89Ir2_Ga6!x zQ>y$>IpUaTkxHGj1KYy-H0##n8tIa#qV3?ist9@+*0ZZ9{~6y(K3)aB>);#2P>}>( z&u*-*&>>WI37sAG6(p8c-11=DC>bvXooBiR2b_NjyS^2ccMMIGSqe_?YuE3U-8rqip$b%|Ed|0?*#V~`5LphTzNO{p*%h4tCOEIpw`EyBYB9)kqx0hP zD6oeNst^wWr!z%}W27lZXL;N(*1@0q5FDi{0+d6M#pXL;Q=(K05>28wU~gE7BZfvy zNOV3V;tdof+O%vKN(cB;2c>|vvqa|PkeTf#%$b93E_Uz?h32R%P?c;u^?ut~nnSHB zP9dv99r<>Nb5&M}Q&)g~MquAm8&p=|-l?Ua#Y#F>CaI~g<6re2ph|-xpbKC26I(RwXgdGK)TD2BoiUA98`W8jvJNW305;*me;;0VPED ztGSIo8~viLJT<>3RE~W|*Fr?2bvnM|5F*1j>kuBjHh2bb3L|&fRMk$+B9maEBl>$P zhqMTcRQ`*5St`68QBTfF9GMuM4!zs?$3mx2LxY|k4gfQUwb80Sg7@s0hltsmLs7Go zLHdnOL~fEjlQif%=>`{xIHCi<4wVsI5vjQVJ>FYYx8@ow2gzAno4$%~yB!~&XnoU6HYD3o*x+z=ZL49jI|aTIX2 zopp#k7%oQ5q?>qfM6(N%rd7 zcY?@bbhAib_Qxu3)ipBuiVozc3ZNC7%|?TVrLo2UZfXfSAQ3a$#KQGrhE5MPX+#qB z(_AO)kNQ%u2f|1`lw_Sly0aCRk8HJo`jnJMMnaN|!cy~k2+!z8TyLqd3oM!a=)@zG z7WKyLQCmd+4ckQTAvBqK4%BNNta98^+O(X#;3 zd?!BCFKl@q1N|SsxA5pr4D`PQA&c9d!1~1&m3M{hqv6vpG>meopxD`u0bFpvv4vBe zU^1H7m!g}X!C?4mw7S^HNvEDZO})u4;k-;gSDREXsvW~^9h@Un4L}q+#Pqpf_RF?9 zyVQ5*PpI&y^GkgzUjx^j*pGDxPwMoNjRzuEU;^L|H25#UPLS;V#YsB@PI8g6pVV5= za;SS+c-F}7VD{eW&a4Z%Te>j=a5Y-NV0dI?Y0tJ)u%N;JAJyPLJO6QC%S3o1xoRgT zbdeOQ#V?Qj-{-Oa`#ko4KPBV`juKo!Tv6ofG0u^j(hXa{879KWO@0AmHcQD7xhY4$c`c6@7#{=Y zKi=@8Xd&A`Gg5(K^j`FS7>sX=>JqmP=+)(pR-iPIEgg6lTO50$C0H2IIfC3M#Kt5l zlas>1^FNyG1TXj~`gdw8FzPrbNGCgvr6^(tfT(f}&$EaEs{*J(%($Lj=E)as*Caqk zMKK46Y@F!csqNdCfzy8PZ-W&hP8oH)iKN3FnsT}x?LEP;tLsM+AfY|x4Uqwu)C*rk zZE7}7sfo`Uet;G|Hg5>CPgRqLA7SzkTh@HHJxKmLU~+W1CJ&WjpaIN&?JbGSx)iG= z{n0SuK|{R~HOBcC62{$QCl#F=;B)DTDTLV=$P}lN)O(B5u>xY)7!!$@KcsoY(!(^5Xgf4-xTooW9a-e3 zvwE@r2%EaFe=ex^>y$W{w@7*^fQAwCgS6qR_x9zI$W1)q*f>&6HqJ(Cj>$$}+s&vE z5DiDiQRN@@wJn71Xv13p6fv|2r;J8yo(~KIc;hB@2N_#oqV2q`!|%xb;2EF15_tqJ}_1%*l?RV0rP=WCzOQyk3yYb z<^$hS^ML~~+x7)L1=xQA{82-E9xuq$Sc#yKWi-pkT#F)?rz28kig`c*`{QtyfOFz7 z%>x=AgYsP9!c~;l(UtLf0mtE;R@8nb&Gv>~!_?g*)cgaFEu7>8Y3dHNbYcsSU+1RM z!XKtw8z&bW-HT=f%K{edgeyZ;05$`Q+Xupc=uBzk!4vFPn;S#%+!>!HG)hHfmu{>@CR7S5Q7WBr;@8`Ap6H=98lz_GsJ z#n`>Nb`@9^(#BF%o10o(zqWQXo!1vSsSgyIB*meV$71{{JByq{*IZ3!#nbmAbM46d z?p>O?@KKnNnqch0Y~j5*&a|Ke z>NUCs&!AJhkto)~UF4K(4LWl>=zS}Z?knC;Clm&q?UW@1@8=+Qwc~Yf8|j9QAB-FX zO3%ak*{z?cX#WV$(9bOWq-89^X}=FW=jdmZelAtdl6H8OsIS!MfIh5xTiXhdk=pKz ziEkU$3oCT?aSz4WTSTir>RXyZXSbP}vE5(3bqz9{KxKP;1{Yn3)VfXh<1erYe-ZIp zdtQ0-1$?Fz*ltet3Bl_}&c4sR-v0dFCijvfrR{Zx&?`&;o^${Q}L?XsJTA z{jQydS0b+0&u0BxrJw8cbEAHC=x3*X9@5Vv`bqYS*law|8QjRlt*HZMjND$kRC$s) zgJupMgtn_!GH0Mw8eOAawK=a{k5~LFkM*!(3bU17V;0<|EqLvI4ixEa!D|l!r9g-E zvs*v41+Uc>yjENAT5Z8=wFR%$7Q9wl@LFxbbIF3|#x3}(yvv!ZL41G}9xp3?W2qX` zM+%Y=sm6-NDEK0x$KLsB3U&j9hn>V$9_ZN}X!$71*ZLjs4u)s1LtD6}i2h$lXAqmM za1dTm{-Nc&gBQ$Rqd5n5evpEWNY=6eGI~T5eV&XoykQgcFuY51Md7v7#gMsR)>=S~VgjL8wJLDM;+>eEx4H>WfiBW4CNS2pY@Rx&{>v zT7`4DNF8|dpZ1P;d3u7*h<7$qS;|FmNn9F&P8*fEz$4T=Qqut2y_bp)JS>m-Do)KUeAJI{n7>kvSwA&~}BY;uNXU=o*FU;v|%gWQM@`#nIddIV|UTMM;Hcc z3+O?h|@?{dwXwN zfW*he!M8wdlp-Y%pG9m+F5heIcd(#^qQ^VBToqlw`T18*bE#2Gnl zyNyq8KBPou@3fItF<*V>2Pn=(VeZQn<+DO)9gH1zm@A{+6{o3L_H7ar3ojj2r*`5wgT#db@534P5BG;l61e}jx zbER-;ZdB`Tug80dgYWb2qR->Mf~Kx0yq3t(Kr1_Yzi=i8m;*JUCcavQ{*0g2M+-3f z3I-fFnu8ZReAg;OqYpHtW8Jx!XxT17uBvjR#u8DBg2YUKseD_y6}wlk5!f8{j*Wo5 zj(TSb&Eq=s-4HF+1qsek4Mt|KQG_T>q>Sh(OwWso+b&GRH(CaY9R={pKjORmh;IuT z2#e38eiBcI6BKFi#FrY1SMtee;zFOfGP+oYaIq9FjJn*f^6tAM*ye17|xeAB}t}`f; zK1r_nKf<(0Pje(RAoq!xBB(?(^cRr4tM z0$!jWUCuz+(m%O;z(6iz#c8RpVP#6B|2LEG>_;|xP}9)y?Jk=Q#%xyB z5%ZFNLdB$S0V*Cu>B!P~(m%Zqzr^Y2=$HIP|AY*wYUI44E&p^)q-VUYNGxAza&cn$ z3R%AWMn2e#E4_*2o0hgJHM#nPgoT3Z1wTX@uJiv8+)B@@Ql*|rF9n+B5^OhRXYt^H zRxtg9ev7SXzU0MoPDuClTf8(qt>5DM^b`9nu1X)=Z}B`kJ-OfF(tbA&1Z@c#n8HEH z&kY)x-f!AS{y(LwHP3IGcoicG!;G1S;>LU_29PGas2KFO-cpCJxG0h>>{NAKnEAq3 zHjZ;!r)iR{lU&r6MG+Hyv-aV34({JE9;fFv4A|Kai0Cs&FkDB}gMX8)FN!ziq(zf{ z0_QdgURS`ri4T3`Oc%E|%4sF@f1K4X`tdf?(|@8>7q=Kt<=TO*9K*E2b`+q@SHJ&f)R;O!kP&pK^#{i)8!bpq;yez3O| z^=ci`PkJO<+!q%J+8a$z|67GFDm!%1=S7xvKK=B%Mrd4<$NWYyKGdp;A<8jc(+hR6 z$Hk22yQs0Ar|I1}N#9VBJYRN&n67cRM!%wQ*~g`zS83cG^IVPh?(|w#g~lhl;;q*B zR2Q!PVIodba^X!(KQvZ;jrYx(&rAd8=L$`q=Th_?26xe~)c95x{%wu7yKtJtBYn1ALA-r|@eBLlKE^NVgMU%u87`mG89(28#f6`(@xQw8FKfKZg^yr-sKpaE!f&*u zm+cmL=WE=IrA&~^G#+v3tytsVa^cf8zS)I;MdSNi_*EMJvJ0Q9@q;d$juWBsvd)E9 zGd|Sn7-A$>&pJ&{?XbL>H2yylg!^X3^R09jzCzPe`!BCM7@xp%rV@{6`VlVr?`V3{ z9+@!T*Yr6q`X6h0w>`!w#ZukP3QWiI-MG#+r_+ciGRh40e%*If7$8n1TY zf7JL5F8o=>hgvzV{CYvt-{zu!MdOYOe_iv*7-}@Bp8wSJyct_~y`%9D1V+yHHO^y5 z;n$=2TP`_M1`yHt7LQ*A{UFBC{<`RgX!<|6~W!jI*#p z8q1o(IREs*R|9g}6cHTsz+d*j|L%b&qoa|C|3D9Xf(Jgy18)F+cE5?SG~t!6Z+g(L z_Q3z_fgkq3k9y!Ipx>7$yfnFszW54_6*KLZtZB6;R|;6L)fyFKv9nDb7=|85U?=6KMzdf>Y~ z@Dz+&62%+z!0-3K9|C@k7*El>4PBX-S4hNv67X}xIE&_G=$h$4|6LFKSr7b7@JkeL zA;3iO&R{$~zT-I^$g|yp&)KM#6Yeydf*qM-AcsgHV^zU;6uguk>+ja+U-IA zga`gF54;9b9*N{>1^yFjyowCJs0R7^G2?mqP0u0WZL0^LCq3}DJn$Pm>RW3O{?*&a ziu!u1?CQ&BhQ^nbRV-bao0~gI{)4?h#mrD{Zbemj1ONM{P-CE?cxE|%igQQdSc%ww z-wTuiT0E<4=J>Lip;0*t>l$#V$$~OEIiwtCP?UwruNzt2*ib$)=kvujc~oHL=(6JC z(&-g5ro%OoW5z))_5Uw8f_u#Z5_I~^P+r-L`ABy97^WY~Y{qgV;~5#xlzALgp3)D8%2U5g zpU3ohN+?C6xN+EVOf!yS8OJo^n0_2fHI6xt<51%`)HoH2`H$yNZGO5*FvDmN5fDY=k{4!VyaszaKKZjvUtX#Mb@IqMHTfo;;gZT8XN&ub~TDw zepwlg469pGh9k!CzjG@a8tNL*k}@eyQe&D}+fs&q%+*l2sIoRh)oC22>a+}fgG$gZ zs3~2%$Q`b__7lPtT{W_ya^c9bvg?*EEvv_wVs*9n|Gc3a%NA3wpmvGkI4VD0DX12w zymkQ&u$o_9Q(jw9Ip0I7nK@-MW|mphizzRgUwK`1ZCM4M1*edPO4fk(#~E10cXsU( zw6$e3_+LFijLTIWGPm|$%5)ebX+QpvU10$&TjQWs2TqbDv^A}lXHuYCtStM+%nZArWS2oB)`Y5Q^JmdNgTr}L z4UoI3x@JKc{fqCiQ03ClC*+C8sHK?e@aa@=CfC(2tiEn64p^*4SNn4qR558OUIfQf z<3DH@QyoTN?l{iFGW8#9=^#cHxGXnkGW|p4`Z{DVGeFNNrl(Ii^cvg1!-EQr>vM!3 zr%nVbMq}~0N)k0Vi<;=)*?|QrsaTrFHkL0&=P#bXhot>n}&zqxa zyr?qbv)dDfq@)S%*T-`dDIa4}jsr!@>K2wYl-FKYS+;Od2(sQpIiZrD8&Cd!ro~8@ zHQY;zXABpzu{Cw&XvzQA2A9y@R6)+e$bcp>(77VB)O|no60e>+Be zXk*&ds86eli>>-59B5n4c2Cs`dJjq*bj9HDNkYZ>eVz&qBFvnO;@}qZ^H&??jg8gU z)q>&7F`u&;M}u|+1*QQSDThXTWDEHXO||Iv;h)V@W!}5`s5U+K++045SJlc)_x~V2 zb8}}kKscSHP+%R_?Y!=qL=vddjA#S&4T`251dXv zqRUO6>49JBflv3qZ}Pxbd*DCuz@PTO-|)cS_rOO{LKCF-s~&ij2mT`u{1FeF_LC)w zmrguRgrDnykMY2-_rTSDpuYM06AyYiP%)7_A9>(|^inV-uNk+o&t)1XvpZYhcL|(U z6Ak@3!RH$SUoUXlGim5|3;ZsDCt;nKE|TZFxDEY@8Yg+aC-9R6{w0B*F8Hhwc%Hze zJOv)O?SU`QxLckkfoF<%ZxVdIFYxaP{09R6g}`a2zR|-@f!{6g0|H+w@V^LL>hl$i zllER-Q|54EYMBvW}{HFpxEbyNRd@$Ct=_2{> z!ENM!O5+r7j=-N0^xqNq7qLD~7xB3lx8XBI;Idqodf@W}{&T_SW{s0PxdLw%^imJs z5V(x@+XDZ#;PV54uM+srHBRx$`t2csj}r8c3qGzMz-&d7hw`@m?nAFBbf#3wl}q%nFw9JO}sB@ob)F7cMJSdL7zMfFSv-0jCYX0WxQ7k`~ie9 z@y^va#Y=nA4PGherQVtZeSx5F6ZEp4SuN-b1^ur)=>H(_2L=7J0$(lgHw4}+@OK3+ z>65+)B3z_5iGM-h--e&j!%%_Cde0WP9G5K;xEz;#OW+#?|Az$LEbuOYZxZ;s8mIi4 zByj)9c)>;KlKL+axJ*}2;8G7)3S81J)i}i~>%HXypA0{vw^qSN)}KEU_+~->Tfs;2 z?+|#Ap#Qz#BioUG2>c#Fe@x(81U~o_yx?-%!|4K-`So2z&g}?=G3hN3^*P}>n=IRf zH|X%CE_|%UuW{jLXndgyzf$8jxNvGq=(@#)2Ni6scHs*(ezyxZ`=8oG{X^+`MbqbK z{g6EnPBur^WEcKR1zXcy_>&sH(uGr9M%UL|_;LkXH@k4NAGF1VUy`H(gk5-&##gy; zvyXj^3!kCs*ST=RUk~@$9*PmAu?M3+(#@>`H+Dg|9PgNXCY)@{@G<#GxGbk5@J^Q- zH+DpLJ8r{=>I%Bt^u{jSxUnxc{x!vh`N;ag*b&joda_>7OZiDBbh-JP{CDHVz6fu| zZPI1z%S}&h2VHLb5e4^=f49J;{Kig+kJRVOf?lSpOXE~7rr<4DGV)G0fZ^QFJ`z@>$SLKaQ{d?$`;oYu@1?kmJW&sNI*XewdVB%5p_lbri@-_ebg?bq zY3R2zs^n=E_!mUH%>p;y5s>^6zfjQ2e%e%l%YK^q{>H6`mjr#Ah__4NGTtKszg^IO zDDXQ3o~-po@k%?-#yeev%lZ6TMwQ+u=rGM!)}PJ56X{dx;d#x6_)9(fTjRuAwrd{< zdaA<>|A_*Za<*!m_((a|3i@Wa4WHA6ex#gZ1uo^BEpSQSAaF@)V1}rc1W7 zGF>-l`Q7RA(*M08y(>j}pB1>2|80Rw`A^hxy5%40AwSKD(dD+Ekb*f+WWLZCoGzko z#%=OtJ=}B={!QElf0003giHB9U{v8!epCOr<)>4w=^{Q-|1{@77vasgO}y8_O_v-0 zmV*1>n>_HS2R>NH(+nCDZ=naizytrj2hL~qg0EZtw>;>Fk-`$t2R!f^5Bw({_-+sU zeGh!N?)bXpr+;>oNY0Q4{!0)1Ne}#W54;}zPPT7B3#Hhks;5K}I>Jjf4QNCn-evQCoeg3eh1i|IDhawOBIuHD? z2d>UTQT(O;FBj!n>i;=`OF74j@+I+*#wpp;a2q|Sa{*Mm8wCEa2cLflT;@x%D0h-i zp}=Lj771LY>n?#)-^0lHOM$lt{Nhx+;G%R5#%<_t(KxBQRp1W^T*~vjz@82KS$t_Uas3p`VAiRf7Q5Kp9?ATa8bG>|KA9_8Gc6pvrfbdE~1y|y+VICO8lqb zHuP5te5%0bYMl7|M&KcV%Xxqm9{9IC@E?2NzY@5dmv~U)BtP9|p5zfh-!A0*ouHTL zJs@zI-sc4$ncja0`eMQVO+hdF=O22|n~!WspOU^7?{pC^%WsjWpPS)l^6O+#ze##^ z4wTZ3E$G!bP>TOA1zrd@T}Gc&_UNLpbP+xsw~4ouKwKo}cW@j08Uk?Q680eZpQCZ&KSR);??In0=w}LgIgXS3 z&3q~Gr@o?*e~t(LTLk}e1^wD&yx<}|-;dkyxnJYNf40C)KZ@wX0^cL(X-?ko=@k4W z{fh#pzLTLpEO2QjZwXx1KXM-<&CwY?$s`~ylArDibw6OJ#_1vXoav%B_1I+smwGGH z{K#AC?Iw*=oLAvC@+=qhKM}Y(w@B&#rvm?`;4??yW`7{XEBUDNiBwv@D(JU(#Curq zKU>hN^LG@Vs|9{c@R8+ulJ4giJ)88F3S9D^BXA01>bGivpCjT8X`Isg4T0YxaA_ys z7JOuWJt+DoGQW0doMfRo)5xE!`yqs1EAW}3eHHnK-16)b^wsb;`guyw%X;I_0{^L?e@F27y1-LJ|5oxb`wuB!t{3#f z1id5hOEgaOH3FY0=)WQGR)JIBz@+P20+;o`S`Yk}0+;pw{Q{Tm$io7c{C9fba=#^| z&FoirMbi`ZJt6-;1inb%Zwmfv1b$S|%l^`bf?n3oC!UDFxF}xg;~BlleV#I3&d~H^ zSC0t#Y{5s$KSAJig8nkW=lcSu^OERt>!D2G_3$@xE)aaA9##l?DUaC~O8jpSe7-06 zNO?90K936eM+ClI;7g~et(ir zg(E!^{|7Xm(_OgXf1V3B`x{2O@V{z4`7ZovjjLGs-(grg%?qA>?IwBXHrFieFnF_m zr#h1^Bfol6dq)jUei=I6ZcRW~s&>=EjIRxUb1wHP9gc9_G;t`i9!>adjHsUs0&vko z7b$)}Ti{wHj8_Rfoe}l(Yk?0Dc(=fZ3cN^Ixih7bPrz8cm>!xhB8>bzr>UJ7H*@!lioi4T=|y3)n?g+yy%)Ur+$IMJJN_!xno zrD^GLiNJ~eB5h~w0w@0FJn(M`oale0>8+8CH!cd5&&Lx-ZSb?oxbT@|`A9l#z#6%r zJXCItoZr}Jjcll+7b4Fci34L|L?fGOYpSoWthrHQ_&W9f=n%0_d2pAI|Nl_d|KI^x z{~ZbXuRJSj60sB~ z1bKPu!-0Bx$Il`uq62(-d;afF0^n1s`Y`?v9_!PqV#SGGZexwrylk}QpoGtRumL3} z;XxBPoIsobqN;gF)5|daGur$V(aSXVI&35^muiimlLY>~nkP5O|9@$c3YD=ohRPdo zIv}^JsERxfL!fpS{vIbH7`v%x#IZXuh2afny>YH_a}C$Xn!1YenvuslhYY9xEuyo} ztdX^Kp~{g{FP}XELRMU_IaOBS1fudql`zhRItczBxW=IqE&Hd2Wr22N>1QFHOK|J% zT5}1TUgy(>Z>GSwWcV=NKW+Gx9J+V-$Y%(@CPDb6 zpCSA`3Bup_8NzQ&5T4e7K5hDG>`a%`-+H`%+VJ~1bnoya)29vpCmlXjKgoVbrcWFG ze-ebJ@%pC?|5qJervJ7C;r+mjo zrJtq%j6P@#LDzY>DSka1B#5uohQI*&Nwo615HG~@^M=nwSmHSfx4hQq_>1Hq7X(Ir zBS$eXa=Z2SKj$lM|2Bl`mB+Q($&Uj3CemN~21Vu98D5B28dsb6je5QcjN_-lqqq)| zVsM@7ir<}oG_S$&yTY%(pM%HN-zk0?r@P}%0slntTO(C?`G3L)amP=A6UBc-$KRpY zSQI~*qC5USd&EB{M+KDscZ?8s{0BVZ-}rzEZ~l)7#eXVpcl>WaZ(w2dbLnrMHYh** zkzQi%}|vTmCeJPo%%Y4=VcgIy}iw^A2wLbG+gotpb|=3!&Nc z(cc9g@vqvXLLAfqDgHBYyW?;1h(BYj3TVC?(QNv}zsw{4s?91yhYm>b`*FMD|EWj( zIpb77^ZlZF>uW!2J>t*WqC#}&fE52ZxZUy7{^TU!?))zuuL7F?kD=cB#{Z~C{D*b? zrSPYV;?KnGj{hZ(_}3MH7}rD+PF!yL`-?~Xd9;XvtAl@4{8ZPwS zq(YeaYEq`xfPf$Go! z3-KI*+pRy^e?jrP^|v*k0)CSGk9mYYsKe`GpqPpHP5S@pk^b~)Dv0^N9)^M2eqQ!S z|6!f}PUH_=lz!?fxYKW8-v!Cy)_=y;0CAcBi3k{{>*~u>&CM&>i$^St%|9aHoF=XcC1#{3i}>U1B0suQ9#rSL^=+Sr%(e