From 705c5059826219bf29ced69e83581ec78080a20a Mon Sep 17 00:00:00 2001 From: Fabian Hamacher Date: Fri, 13 Dec 2024 02:31:59 +0100 Subject: [PATCH] Maybe a way to really display the board --- README.md | 52 +++++++------- main.cpp | 201 +++++++++++++++++++++++++++++++++++++++++++++--------- main.exe | Bin 78145 -> 81488 bytes 3 files changed, 198 insertions(+), 55 deletions(-) diff --git a/README.md b/README.md index afe2a8d..b5c24f1 100644 --- a/README.md +++ b/README.md @@ -1,51 +1,57 @@ # c/c++ Abschlussprojekt - Schach ## Notwendige Umsetzungen + 1. Klasse für Spielbrett 2. Oberklasse für Spielfiguren - 1. Bauer - 2. Dame - 3. König - 4. Läufer - 5. Turm - 6. Springer + 1. Bauer + 2. Dame + 3. König + 4. Läufer + 5. Turm + 6. Springer 3. Fancy User Interface +4. Speicherung des Spielbretts ### Spielbrett + - 8x8 Matrix - ANSI Linien checken - Unterscheidung von schwarzen und weißen Feldern - UTF-8 Spielfiguren - draw() Funktion -- movement - - Schachnotation - - oder Klickbar? +- movement + - Schachnotation + - oder Klickbar? - Beschriftung des Spielbretts ### Spielfiguren + - Interface für Implementierung? - Default Felder: - - Art der Figure - - UTF-8 Code - - Schlagen: Ich sehe dich nach movement Regeln -> Du stirbst + - Art der Figure + - UTF-8 Code + - Schlagen: Ich sehe dich nach movement Regeln -> Du stirbst - Bauer: - - Movement: 1 Felder, außer bei Start 1-2 Felder - - Schlagen: 1 Feld vor Diagonal - - Spezialmove: - - Beförderung - - En Passent - Wie? + - Movement: 1 Felder, außer bei Start 1-2 Felder + - Schlagen: 1 Feld vor Diagonal + - Spezialmove: + - Beförderung + - En Passent - Wie? - Dame: - - Movement: Fuck it, i do what i want + - Movement: Fuck it, i do what i want - König: - - Movement: Körperklaus. Ich kann nur ein Feld nach überall - - Spezialmove: Castlen + - Movement: Körperklaus. Ich kann nur ein Feld nach überall + - Spezialmove: Castlen - Läufer: - - Movement: Die Diagnal ist mir + - Movement: Die Diagnal ist mir - Turm: - - Movement: Vertikal und Horizontal + - Movement: Vertikal und Horizontal - Springer: - - Movement: L-Bewegung (2 nach vorn + 1 nach links oder rechts); Krake + - Movement: L-Bewegung (2 nach vorn + 1 nach links oder rechts); Krake ## Optional wenn Lust und Zeit? + 1. Bedienung per Maus 2. Multiplayer +3. Historie der Spielzüge diff --git a/main.cpp b/main.cpp index 8be4621..750cf11 100644 --- a/main.cpp +++ b/main.cpp @@ -4,12 +4,168 @@ #include #include #include +#include int main() { + SetConsoleOutputCP(CP_UTF8); + + // Zeichen für die Rahmen und das Schachbrett + const std::string topLeft = "┌", topRight = "┐", bottomLeft = "└", bottomRight = "┘"; + const std::string horizontal = "─", vertical = "│"; + const std::string topIntersection = "┬", bottomIntersection = "┴", middleIntersection = "┼"; + + const std::string whiteSquare = "□"; // Weißes Feld + const std::string blackSquare = "■"; // Schwarzes Feld + + const int boardSize = 8; // Schachbrettgröße + + // Obere Rahmenlinie + std::cout << topLeft; + for (int col = 0; col < boardSize; ++col) { + std::cout << horizontal << horizontal << horizontal; + if (col < boardSize - 1) std::cout << topIntersection; + } + std::cout << topRight << "\n"; + + // Schachbrett mit vertikalen Linien + for (int row = 0; row < boardSize; ++row) { + for (int subRow = 0; subRow < 1; ++subRow) { + std::cout << vertical; + for (int col = 0; col < boardSize; ++col) { + if ((row + col) % 2 == 0) { + std::cout << " " << whiteSquare << " "; + } + else { + std::cout << " " << blackSquare << " "; + } + std::cout << vertical; + } + std::cout << "\n"; + } + + // Horizontale Trennlinie (außer nach der letzten Zeile) + if (row < boardSize - 1) { + std::cout << vertical; + for (int col = 0; col < boardSize; ++col) { + std::cout << horizontal << horizontal << horizontal; + if (col < boardSize - 1) std::cout << middleIntersection; + } + std::cout << vertical << "\n"; + } + } + + // Untere Rahmenlinie + std::cout << bottomLeft; + for (int col = 0; col < boardSize; ++col) { + std::cout << horizontal << horizontal << horizontal; + if (col < boardSize - 1) std::cout << bottomIntersection; + } + std::cout << bottomRight << "\n"; + + return 0; +} + +/*int main() { //std::setlocale(LC_ALL, ""); SetConsoleOutputCP(CP_UTF8); + const std::string white = "\u25A1"; + const std::string whiteKing = "\u2654"; + const std::string whiteQueen = "\u2655"; + const std::string whiteRook = "\u2656"; + const std::string whiteBischop = "\u2657"; + const std::string whiteKnight = "\u2658"; + const std::string whitePawn = "\u2659"; + + const std::string black = "\u2B1B"; + const std::string blackKing = "\u265A"; + const std::string blackQueen = "\u265B"; + const std::string blackRook = "\u265C"; + const std::string blackBischop = "\u265D"; + const std::string blackKnight = "\u265E"; + const std::string blackPawn = "\u265F"; + + int brett[8][8] = { + {201, 202, 203, 204, 205, 203, 202, 201}, + {200, 200, 200, 200, 200, 200, 200, 200}, + {1, 2, 1, 2, 1, 2, 1, 2}, + {2, 1, 2, 1, 2, 1, 2, 1}, + {1, 2, 1, 2, 1, 2, 1, 2}, + {2, 1, 2, 1, 2, 1, 2, 1}, + {100, 100, 100, 100, 100, 100, 100, 100}, + {101, 102, 103, 104, 105, 103, 102, 101} + }; + + + std::string field; + for (auto& row : brett) { + for (int col : row) { + switch (col) { + case 1: field += white; + break; + case 101: field += whiteRook; + break; + case 102: field += whiteKnight; + break; + case 103: field += whiteBischop; + break; + case 104: field += whiteQueen; + break; + case 105: field += whiteKing; + break; + case 100: field += whitePawn; + break; + case 2: field += black; + break; + case 201: field += blackRook; + break; + case 202: field += blackKnight; + break; + case 203: field += blackBischop; + break; + case 204: field += blackQueen; + break; + case 205: field += blackKing; + break; + case 200: field += blackPawn; + break; + default: break; + } + } + field += "\n"; + } + + std::cout << field << std::endl; + + //std::wcout << L"\u2500" << std::endl; + //std::cout << field << std::endl; + return 0; +}*/ + + +void firstVersion() { + const std::string white = "\u2B1C"; + const std::string black = "\u2B1B"; + + std::string brett[8][8]; + + std::string field; + for (int y = 0; y < 8; y++) { + for (int x = 0; x < 8; x++) { + if (y % 2 == 0) { + field = (x % 2 == 0) ? "\u2B1C" : "\u2B1B"; + } + else { + field = (x % 2 == 0) ? "⬛" : "⬜"; + } + std::cout << field; + } + std::cout << "\n"; + } +} + +void secondVersion() { //wchar_t t = 0x25FF; // Horizontale Linie u2500 @@ -21,9 +177,9 @@ int main() { std::string topRightCorner = "\u2554"; std::string topLeftCorner = "\u2557"; - std::string bottomRightCorner = "\u255A"; - std::string bottomLeftCorner = "\u255D"; - std::string horizontalLine = "\u2550"; + std::string bottomLeftCorner = "\u255A"; + std::string bottomRightCorner = "\u255D"; + std::string horizontalLine = "\u2550\u2550"; std::string verticalLine = "\u2551"; std::string crossSuc = "\u256C"; std::string leftSide = "\u2560"; @@ -34,38 +190,19 @@ int main() { std::string firstLine = "\u2554\u2550\u2566"; std::string line; - for (int row = 0; row < 8; ++row) { + for (int row = 0; row < 9; ++row) { for (int col = 0; col < 8; ++col) { - if (row == 0 && col > 0) line += horizontalLine + topSide; - if (row == 7 && col > 0) line += horizontalLine + bottomSide; - if (col == 0 && row < 7 && row > 0) line += leftSide; - if (col == 7 && row < 7 && row > 0) line += horizontalLine + rightSide; - if ((row > 0 && row < 7) && (col > 0 && col < 7)) line += horizontalLine + crossSuc; - if (row == 0 && col == 0) line += topRightCorner + horizontalLine + topSide; - if (row == 7 && col == 0) line += "\u255A\u2550\u2569"; - if (row == 0 && col == 7) line += "\u2550\u2557"; - if (row == 7 && col == 7) line += "\u2550\u255D"; + if (row == 0 && col > 0) line += topSide + horizontalLine; + if (row == 8 && col > 0) line += bottomSide + horizontalLine; + if (col == 0 && row < 8 && row > 0) line += leftSide + horizontalLine; + if (row > 0 && row < 8 && col > 0) line += crossSuc + horizontalLine; + if (col == 7 && row < 8 && row > 0) line += rightSide; + if (row == 0 && col == 0) line += topRightCorner + horizontalLine; + if (row == 8 && col == 0) line += bottomLeftCorner + horizontalLine; + if (row == 0 && col == 7) line += topLeftCorner + "\n" + verticalLine; + if (row == 8 && col == 7) line += bottomRightCorner; } line += "\n"; } - - //std::wcout << L"\u2500" << std::endl; - std::cout << line << std::endl; - return 0; } -void firstVersion() { - std::string field; - for (int y = 0; y < 8; y++) { - for (int x = 0; x < 8; x++) { - if (y % 2 == 0) { - field = (x % 2 == 0) ? "⬜" : "⬛"; - } - else { - field = (x % 2 == 0) ? "⬛" : "⬜"; - } - std::cout << field; - } - std::cout << "\n"; - } -} diff --git a/main.exe b/main.exe index 4b1171e4e9354a7f5c5b1261a4600b1e0d414973..522827becb4be15d913408a7990de11e12e044d8 100644 GIT binary patch delta 24436 zcmc(Hdt6l2`uE-&21n%PFe)N(8@ww5!8j7osEl#U)1lI`BtZp3L#4uwb*#bAk^n`P zilrGOUP@CEO7j+|g{CQ{nHCjCO~;_3@)UKLl4oxS3;VWM&NV`?#cH9c6w0QwmRZid z7*wmB!Gj#d8#H3-C50pkABm(v_}O~FT>u3Mh*h~`Xq$>iDcFKwclB_Lr-TAeapGQ~ zF7=MFO~8O`oBN{Yp&^-OOc}+sG^os<>aso*T`p5PDMnj5ImVl0zK{@RJ@tg(1F`Y1 zC5pOIV5pYj090c;g$SaH{nID74=^4(O{TLoxtR6raaPJ5#=hz?T)Jy0>!pp5`VM0w zv`NyQp=_2mO4SjXXSdrc@@`C%H~KX5r8_d~`Hb6b%yiG7YKas+x*=I#jgQk`Hjw5Am?~DUcmIex$NuQjB-Wl`i|^ zHz9fdy-PX^DfG_=3uOKJABfa)@bYC@VcA@2xlmbIVJWYevbl7!HO3n}=`@07TNHwd zQ4vqG?ZyyfkqXO}Qp-88FDoLqr);5#fa^St!O-Km8hNF;7zA4Z`sr>eB)_3PmuO2D`E$Jv3%$kC$=hGxQ=VdX=~&Kf;~dra zESu6*X0eH_CG8>-iOEWupMYk^XnTOaVhx4ZF`V!4*mZD`{ck{b7#)a1?ljPfH56%w z+&h1gdy6>u5_I#=YFi1o1Rj+N2d_DVgNWwp6&7pT)Fu_ z4){(oYq>%L{!h~tNnW_7%ZdR7s39OX{b|0g@cE+U>E^Jlo%$?S;LR02U35>m_cx*6 zF#-zLUe4bI{w|E~K3a-AH^?$pd5x8mkfr^X6IiZAf3K2Y{ccW#Mgb6h)sp%Gv)DG zS25)?g?o|Aea6B48Mx~>_p&hzs+Cz4$nAO2($no`d){$ZIg;7iyjM;i zfh!)gVx2q3a0q=BuhwBeOO6N>`(@M~bEL?xq$8yCqHQDkJHADb>)`4tVzwMW>qUZ} zp>;;{@YhJpgFLI@Ve*QnfEx+!Fw^o=B9;lUQtMa$JA<*Z!P1{)lMzmneMpwydHV;z z4P`q=yRRjklO^)}2BiQ?Cp~`KDCe!=fV_KJj8MX*qj1Se>qlm8wynlp4E}#{Q5%UK z<)R#rMT=$8mmta|c~`UTVOjDQE_sC{cW_A#$dXHC$xMeN?`pQ%B4yEExoA6yuI8c~ zkVTivqJ15rysO!EHJrQK%_Zp;S+GFYiJoM0&vRcnXsDs$twH2V}|DWXT&a!XJLA1gEkH=(liyWTBPTi$lHpv_+~@4-`DcrK%2nLzjPn#E*sa*VcO z4UN*V5%R&hsaQrTE7lNSDNi*`8j6(FTb6~fV+1^VL%YzaG~`c8Y5WeQyD>!$rNk#I zE#OL_lS9q6BCfMbSU8z>msV)L!QG8>XtpZ;VktOPPjypGjIwH-Lp6t*ZK1Ne!gEg5 zawIYwsuj(&JRMHoLbM%D6JM#`N?CU=PFaw3E0%E#`vIb{U0OJhdmX{O?(Yz!r6;>o zEXz^19JGa)iJU*#Z*#Lxv+Ynre5HB=*&pMu&#`9PSZ?1j6AM|Je}r|oo9H4gN|N7r zDV}qv+4ddL|o+=A=LbiR?W5x zoZu^=*>-{xeB8~pL!99EO|$K7PH^9`L*N9ZaTu+(a*9U~nSm30Vw-Kxg1BzN2R+(u z$n2^8k+0uioTDX5aO?&aV{ z1>_l~*_ID=9XQQ#rh*3vm`Q+g1Jn6b$Grq7w_Oqee21Xi2XyF&T^TqQS!u~P+ky!R z2g28(hA4?B+Ef1u2ROwS7l5k(oXZA#ZP&6n$q8lIyw3?`+3eV`f5UJD#n6Gt5Fq5*ov)F#?SYY8cSSr$#6m zmDK2sMk6(}XnZ?^ecETT)IEa@@B3HDJd-`scN|Wj5B3e~4>!uD+$e2rZkI&bL%Z=in`tlQ}BDf0)O6Qb94mX5>8EQmS%27_r;zfgSc=r_3c2Ib_? z52qywoa0KrfzslctXIfnu;hdc;GcR{8PWr-bs-~0ty4sTAkwe4kW54CrUxquD3Ee#`|bK4+%R^EodHEh4_gy;(yj3BtSsF)Q;M53=YV#08MwfRbX zyvzEm22G1CQ;W|{L_y^uVk)j;^^tuip@}H^?j`HjOUMPK->C$vfjVnRm=>*t7OgPG zqFp$GKZ*T`Hfy1r6-63-T)LCF?xM#%G%BiYbfm(mGCFgsUF~og7BHh#QKKA+lA2j32 zIZLUhvIf6Fn?;0k_u$b|`7G8kcyM$kI_<4CD->+X#C>O*N3F@!nntaunJjV0!`5^~ zM}|^QQfiY@rzmxpQb#Ivj8YF#>JdsEr_|>#V9J>nl)6o++m-r?Tw4d)6rfY7yOjEd zQgv((F6oq||7rQbn>h@}|C0Clv@~l?iU+C@4!IbV|FAQHJ{)L5& zh!)e>og?~>NV&%SF0*LMri74m*%ZC(f3(~~hR_Q`XV}sa3D)yhNr0bLe@0Js3|K1* zY><0E^Dp`yxWA+`uEO#wdBtB_ZaDgbXsb&5#L^GTEPl}Z33|v1wGW|PHbq5t$UEgw#mbf#2Tt~tHRc6rron@Endlv#qH$VhF)!31h^2fdnY;mj~HY7lKf;K4O; zT3j9wX>@tegUuajw!ZKUSotPlcBTB^_5Ei6xh@3KF5p>77jN@gymt_0dV=P1FX8W+ z-+Kw$L`}J$a8cB3^b=l^H1&SMeo1rK4_`TJ&iM(idTB2E38%a?KlurEFU=Bvq260l z=`UQcdjG6>&0qLeufx!0w~KuSYj%4HQ#8lDgkQx+FL((@z4Cd-4l!0!<}c)HHv0>& zi<*7@LYt^L?JumAG*|qER!Q@lzwnZmW<>xbG@Am1TV9&I0m5Ey&Bp=4Pu`kK0m2TA z=GOqB(nqr*NZ8_|!S@qad^A%){O+T9HBdOzgF4Rj(CiEp)@iA|Q>%GDP`Ii!qWxA+ zO>3ag(Ub5czM6jq3j2Jieco4793))#)%+AFyxwaVkQ)C@-fU%Tgip_?agPfn4O?R$ z5m|fe*afYF%|ayYIovJ`n$w-hW?{%3W?@IMS*S-brkI5XQ8MqJEM%rn7EH)_DJaE- z^6wSQXlI~ILMepYS(L@#e;egG%C9NrhI`X0#Hs|##MR}(rPY-vt5MdW6r((kvIC_N z<$!Q$Z7oWT;44H5mv(GGSub2#1O7GDD6gQric-lYC(xv`^$E%So6LeYN(P(_t2bj9 z@|88T;roP8F|>G?S(u1&KS~zL-%;kHT8iTafqf8L4 z^b=rT5UA~i&A+2P-mN{$tzGNZZgp#G`@3Y#Zta9zYpa!w#EAMb+Bv zU%IQ2E^Z5AM}; z(r#Y`1>Uz>S@8HFk!#xQ_5lMRu^c0!@souOr|fnLl=qQVHf{WElfuxZOME7C(tU!s zSleU0#a(U)`bci?$98)aYVYD!*GMccc$IidFVZk5eB@cm$Ly8yM#=9Z_6e%VA2Hu_ zqjd9QHZFZ=bpJ2h9EyZ8QhW}IqfmR#IBmDHsJnw%O?n_3W$DxF=yAK9c8T6mr`hTB zBD+F13)QyW z%s3%j(l)RMCWLG3yY2Qn*u06ueIp@H0q|~MJ0~Pd%Ny9Y6O7?g8|?NRpw2a%UgAYz zFrjQ{U}<*^lUm+kbMG27?r-nf?Md#OkGodm4&b@yKZxmfYVvwdA`Y@iZ`0y??325U zQto@qHzQoy`W_pWVU)_>V>403?Psq5T(_U?L)G^H`yAEN2iWf!Mr+tXyFCx`PQB6$ zZkY6@pv*x3LRG))81-kNyo-MF&n3UjDZd!-xI=ck*}Z?UYg`*}tR&0?!=3I7|8OxJ z0KNqM74H2~snb9k@bA%2A$2;C>yp0-_!sm~ckh=TcFKo|-hz<$K1-Nrl)RhRTvXa7 z_ByJNCLYIWP3-rH;nKz?7J7HM^jZ^3Mpf6u9=SVJW~)0?Tp3>VTaCwoS(96#&2X0~m$}#!)v$Z4K5UuvRxL1z0*gWZbZPU{itJ zaKmiC@)>?~XT5-)E)*?tPG6KkD9I?3Q1VfVQ7Tckpd3XxiSjv0CkkCRQTwft+hM3j zpcqlo6f8rjvy^%^>LQfqQ7YG94ZVU!Bg#pXODJ6^-6)}J1z{M6x^TJ@cX^{yv01$`@zw> zA8f^sT(b_|OE>)gVY%CK-#wN|wjrn0rU~*XU_~e<%uO}Z)KArqiN@VKp)b~=qOudq-O^Zkyls59tNAIk?^NTw% zcaichZ~MgkEv_`~NZcQBqvIcs-yR>E_@OoNlhL1#zBKyV(Las;eY9lqHR(*DrfAbJ zQ-UekG|n{9bf4*A(@fJ`(-Wp=OwXHMGF6#gF}-2hZQ5sg-*nFOtI2;%h<2 zX8xGXV?G*_p8VJ32a>as^OGM>ekQpj`C{^rJ081Z`5iTP9KWOMj(^|LFXhgZhf_*Y zs#4xd2}rdLOP!Efl=^(?%G8%rYg0c+ZBP9*H89PT_LsCNl@hS)S?T3XtKw0qJXNW*~4Nar-JIQ{MP z+jf>dd*rAb`OTv%?nYd9+|4*`d`!ZSgb@jG35f}&gp>rKUjCuFcU(|hSX^XW!%;R1l?K{f zNM9gDv4r3)P)ufzujmtEabga+1wd@EY{N_8_t5^)#swUmK3;hGj&i7=hdbUDlnc!K zy3fhuka`(NWCGKch2PW3o9J#`VdSh;PjO#J> zc4L1rh5h*I0Q?1p&(r8^6q$KtI16175VjY3G2}m8bzrKKh{@+OG~49nP^?G27i(P^ z3jYP+X^>fL*NTY1R`l74H1%??(4E~|a5AA4>EKV%X%u+u9IQfogpVSP0FaFwoV zl}^eGV8yGVr3?MoZh(>T=Yl9OedO& zMbk|z?7M5>?2gsJ>?z;^;gS%-_SQ$UZL4+c62K-lW3@rjhOn5oqnUnL-q3502&R!Sx3AIyiDT$8ryjrR)ee0@l-bphI8j!BHH!eCz8K9j#ryvh2dIGy`Lxj)$LAWPF_~R#QL*JCyAV20R z9C_<$AZD;5&Ej^*&d#1UW6peGM1NXw#N)U@pk(KUx#DulIn2CVD_&u#uNuTmHiLhj ze$&9Vy_zAOL%%_MnDyC6eS~Ih%#b2AtoWU1F`pgZ7@>Iq7BgA%8w2Ps$9iRQOO#`L z*^h4-Sk0DDR=hDrD$ua@Ezwez57JFvcFzt!@d@_9YX&h3O7CKEH8Ij&S?OB#bj^58 zC6s1CX~eKiXtg=r$EbvQAU`XJ>yFRr&wOitXFE3gvVhm$6usG*%?4?;4@-MBTC8E> zCW90g%39x?zzR0SU?{6L8N}V}9Tyx~*C=k_@L~2_U4+jOSb+pR=rOLqxKQPu72k&o zz1Wg1Q`pT~t>h=NotvYP$6&6P9~}}>;Bj+}-O*n>!}@QD@c9^;y11r@?Ae7+~d2!Iw3`erP@rQ@Exg&8v zvcugGGmzCP$GU^-joaoTzec=a5Kq$ZkgFa=+l!UG5fQQo zLIqAC^5;b$ol%&F@Q{sY{w>;J#Gw(L-EYj5LbQB=2EHd<~>hh5QVJPDxyG zmhi;Sh#{X-BGGJ(arg`_VJwjO1KqK zNjdE>@{srWW3h5av2-AnU^MnF!1NUZS7 zP|_t#3ua-vqoqfKnHkl>V3xakkkmAcmG7P%xCCRO3wDtU=3~PrtqNu#4bf6fFiSzT zJ(%S*3=-F{7aI&x=P*oXG&|LhEpKSVHTFZJ zQ}WPGUuJ$MOgWhtkgN3u6D9U~cDQC|7qS<(-kgvUP4knevM%FvunJXRjMWhW# z+K%$5jQ%IZZ6cMxVuS-9lz%o$JSWzSkLuW*LquW%W9AVq8SCp6CvcdV%F>;?1l7R@O# zj&L9(BIyO;K^4*)$YK?88<4kENIVb|Nu$V#a2${n6>`57kXZ%g0?AMzPXU?aM6$Ds zo%Gq)ZIh?L)Qdg5FIq|& z$=aI}+1h3uOL$+$&hOLd`{G%o-V>)2(**26$L}}jV?4Si$vUbI>)7;zz1Zn}J=iDv zb@~Jk#>p~c&=DOQw_nFH59or^TujQH62KlmIDl0i2-T+}oN7l%!P&WN$U$SUTc;v8 z41xxUv&>=kg9D|>UR7U3d5um9Vg;W@Q%C*B6Il3B9sBT*PA|C(D?9%z*}IviXoq|I z`-Wh8C@c0A6DGwsEh~Rtr#E@{mn-`h)?|d8UXBe|A$N@T&0#+`4V28}7<;z07n{%= zDp5ysVpWTd6`jInzgefRf>rgv3uND(Ytf03Z17=&zRrWCNM^YSJ!v2GV!ICaXA=+W zq{TA)%rPAsgb7MKqSGJtkXb%Uu6OuNC<=D}1hGd*=&$D%QVaYuE*-7Y32LeKFC z6&?-Mhj~P2H56d>v>zCQ-8vOPFLv(-*me=i9QO4G1EoZH_Sys4un(hoM{^=}&=*?` zY|Do_{cNNQSf^yI%-;s?UoiavrP86~>Yu087|$oxah7_$PMM{g{RozzlUO(>bkYqOtYiyL;3;@gr=RE{cT;9r&AtPR-^V)r z10F2iI1R#FuVas$G_aSzvdDwQkF&4~tvdEQY->;H^u-=bdRb2md-P)idja>>hL4^1 zWN#LA#=uSieBg{u3Iiur=JeA>=KG0G9K_cm2j{S))`3!pycX*MS#fJL=Z1eK_P4VJ zcC%F%oaG9jvYHd2K8c+?tCM16)#uI_S@Ag?e%D3IoP%@N_D=?~37^JDDY9Ndp;yoD z{LH|fII9cJ@X-4pcYEJio&G4EHyE+o`X51-YFOrH&Ot8W#yCEQMSVJu8860&A?&eF z4HALK`&TdPSo-HWX8Tm94|7>l?x;kWDgUxgY-Cf;8`$rk>ZBAI{PvQL6<+AYzC7Pw zZ}gB%mzfH{H2J)a&HN0R-o>N@X(b=bo1f|Q^&W$n6w6vas|j}NP=vPgF`=9CMDL3O zafWi{6N7XkfG2svn-itR0M`9A4uLM}*obzWG?}Bp_#u=dWJ+e(#w?#3*tZv*5qpoj zwDEJDp8h~V9p5anIhVzLVGMTbRNQLeZgG}5Ow%?Hhfn0zfdH1-7A=0t)vj&R>2v>^ z+Cg6$gWWn6wU^!1{_*8NypTd|uR6y_@Ve5xwZCX(k9`#pQjM)ZfuFMBrM-c$1&DBa z)i(YnDsk^-(mQ)ECz}|@UVFVy;C{~N*fVGd>v~1P2C&z* z_h3z58{x~(?Kp;M=Z7Pg@4`#)+|A0~LU^SIm2tvb-w>Rt`F!)5YvEXx}S3oJo@Q z#cakm2DTh@GN%`@uR;5Kqho8o$qR1YNA11a=C z7JDGetsc;752VHe+2Mig^+1k#Aao9_9!8s=_0N#agNgoRTrDQx%vFu}c_1MkNQ@Iv zUd|F4@jcJHYk@57fDUh5G3@ht9ZtV`vrn%Dvk7na_8OfZ#Fkb@v4>Xa*!5R>S+lce z(Vkz}G17h0{}ZizT=;P(-@@ZPqz^XzDxPp4j#|!gBb!a*e*uM^lpOp%c3R8SvoIt3={sAOLtr|$Dn<7Ej3S_EE>L4L7jU2CNZUGXf zP~0J_a30W7l~@dp$%~vL1Gf+dq+4a|0U(7cqyPwAt|==6LVq^r7^@&$1hPRTWu;^L zSz1S^Nr8w1P_6Qc&wUi)f#j$Z-2=q&ErHB49SFVNxr~(okkWi1c&UUj5(pN$TVO{6xuDYX7a*%u$aEleD$TF=$NVo=F?|3g0ZzFN zVk8_c(&Y;503hm>KMDx_k)UhzDM08Zav_C4v`)>ms0*@ZS@|#MT&sFJsm8K*89M@m zPCi^n8zES%F60*=bfDuxbU1{}P&pI>1lIXiUl=hiBap0F9E;*zG`&tlY#7 z0?7qJN@PW+fv8n~4J0yzE$$4r-WG6mS%4f+9_4bZp8;|OmRvk#KqjdY;LG8-cNT%)wZh*96J4&z z9syDS#5EzU9y~XJ;GENKWC0O^P@@{gLqKv>L!BFeXGe-^Wb44xrefL)gqDrV{COZ* zKwQDM0U57KfWH9=QLR{0B);H>lxwJu0eGy-p-M8^4mu&c<_o&kz3A2hm5D9P{kif5&gM@`Q4gX9eJqzrn@Y<=ig; zIqK9%(0U*t${~TwbDV27yUpeWAjK-Fk#|O8ovNTQK-5c@zGI-vwJfrM%;am36?TPM z9|u_=IYyj4FK^zg!l#8W)pC0QJlj-;P5^Q2G$D-ZGaxyriIS1;fY8_Uu8E5^2!G1m zldOO!p}CkA1ChV%bp-4nkQgs_p3^|&FD)HBfyf1!(BoPFLxIrcdU7QxJT4c<$J{Od zV#*~p4NU1OWAlI%L6J-B86cBXv%D0@26pzx_>>c91v$4*+#(6^~DV6sz)xelUJ1j7;k?KM2SWm7e$B+Wf(F;!RS87?vfQyUPXlorF3N+v3M512+fcZXuR<09nW_XzmRb(vB$_@7 zDhO+>fQG2Vz5tS=LJUJ?ewT|zAekzjWk43GkdJ^|!0yzw6B~tZmWoy8|2pgu%!~?} z2Bt>XbNRRs$T=0yi$Lm~0R^*g42U;smy2Hl$z>1zD?;CaRw4SJLRmDzaQ4!_qOHF8 z>I8#z>lgr}NM$MsNV_Vp<^oydG@kwBoJZ%+C=m3{dl5e|;PadAL|{VL1u54n5g`Yy zfN&SPnLi0+W>5F^^(ByUr!f*s7(t)zBb^AurgC~VkbITYJ3zcu$cH0vo3yFKE`n)< z%4-`C`PWF1O6a1nvg!HY3Uo3Miee8G3bCBm1i|da^ALDo-3@tkB%c3?fJj6ZTMQ43S^tpMe5rPgf=a%p|$|2L56o*wxT4d0GdgT!kD5vQ#B? zxgVe|71J+3>W8uKyTh%4ad6t{8+nif?_+G_RZk34U0it_3z6%UAxXfMbI00Ag)&iqV*|X^rD@ z&Cq-xjuT<>9RI?K2hV08{I`Y}pUiU!$U2qN!;w3dss=U|$a4BOcU<%O2q0uIB}8P* zbK|@KJR4Lo`v(y9yuJ$LhD!6BK(tsK7%c_={(`)`LNhSTziX^V04!F;BQOd3c9o*R zK(wlqZvxTpOekbIT-BS7j^$ORyA zDyOdkX>}r!Q4nJD@^N4{V_sghIZ*7^aP{U_Vz2D%hvRR5GH=#``MC}IZ~a}WZq?_3qfYF%V?u~y97Gq|Vt4_~j@3vaK!7A6j=-ZelBtPZ_R z?6v1yu(;JbVD`c>IC6RT{-VTL3lT7@AMnD6Ozw8tdyA>n zO)+BVo~H(jCqx)Z;*r?%&`_~U+yf7u7o(tYw3`sO8=v5Y?C~8bhKMw@Bsa7g$}QD7 b2C>JU$700-H64cAqrn`i!I#luUuXF2XgFOKWvqWONjFoKKaI4%cC;JB*+$Z4`5 z(GOY%u0qBm(VSfwsG&09g%>^_sxE+h;0uw1)%6@#DZCIFs&32RxR4hjgVebjIBp%8 z@y@^(;#4HVrtxVV4tc6ImTch-@fMVzpNm6syDS`6KXP@>g8T&>m+6ZJ=;Qp563A6P z)Gv%e*)n7yUP1()_d?_VVitV;asq)DAc;uR$b&*e-%6CIk!-SFh={L|YmXv#yDZG) zqTE#rX(!N7k3{>ML(W1+D@qhyN`6MI6D6vDISKC*(U*pXwyh&mQ45f3>&Z&gbaJhL z>_jb2u5BQvP_xLjjpUm?f3oITxT<;h*i@hI*Q7F1g|@y?9M|QG8kn5zHzPit#Yb^) z9*9K&w#Qgyj#Nnt;JB(Vi-jw^!>^%21(6oc7C(sNjzOCH==AKOuM4|ls-}RxPlt~x zEyzt%i~+PVwrGmc7Zr^!D#%qDnyZW|WHvuN$L$M1sZ`by(v;e3htekXygc%W%E0H5 z+p5KZyEa%jduw60syMZ~DYdgMk1SRjY0s!jv{w<3v5kbbuF+M;fN!c_qia&r673;1 ztF2^aeUaIoHh}2Uqz;qYnFv)C&K#7O9A(Y|Q_>?qPvO(O+?oMRscm%-Y_g`(!Q+Z& zw-%?iJr_{boxy?}$qKZ`w3RBPqVSPcX(xPb4-a6#$zh09*#^05`|_z$&;nrhh93R- z%pZZLabjK}FH#w8Q_&&YPyNyIP>jWbA)|3E3MlSR^WtC{T_#hMZqyWI8dX&03Ov}S zr7a=&Ky3O~(Hd>q3PV*i4nWnma9Y#mkuSZ1f`PHvsWY6V%skT9`!k^~l3ev3A(ZP# zKTU+NIFiI_5(V!_vQRTo_%fXA(+sy}pi{x?&^3%1Cf?&kr)kd^x)o^ggaWB;pApJw z_kz$?6lSzvD(u!2eMpgEZpc0kUETC^ejsg#p&}|{`U2Rvh(dNS0yfibx0fvHeRzJ> zBd1H=v2wVMaS0ag)E%q^UG*jT(HxtmAyrIOeSTkuiqDD2Pw(~w5wSMz=M5+{AHZ4mw8DYODwY#*mWRtJmZnc-}U-@~Q-kdf%y-bEndA*B z*})_k07)zDoFv){Bg`mkYp^v+qC=TzClzgEq70CXW=N999g?i6!L~(`jA4=;RI-{$ zGC-2dlq3tR4pG+DV9St1hcVH1Dq6-w86b(ykwm9DBw15~ZGa>>oJqD($#qPU0g~iA zNz&ILi6*NZ;qC}$K^nnCTd8Oc6J>xTnk|W*hY=Pd*3@9zD@n#O$rdV^&LkNiN#;nB zyBw0N2}3MNTK~jEo2jUYi84SET`GyrcZjm42HQwUbR?5(q>^Dwk^z!rt|UoUJLWEH zYOwVVVI3XCB`*+OV23tF}Z!EwZuA3E@>`kdX zto&D$+1fX)@aZ0IeOk$;IM^!LLA!=EMpLqb&IHG5GeE~#xspv(XUPsqEYcdGd>)iz zHIQUc&!P3Fd%f2FnXGYoef9ZH=H_uOH+P zq~k9MwyK#k=#KZAOh$zlprUKp%nLf;o?c9F^MdjuWrdP5NfbRRR$HZbt)B~}URD@D z)Mz)otT3>a8KBeH)4&%PABVS;CmAp}3^1s{HiFjaUi4S0dCj7d)I-i8z+m`d{yRrw zE7h1<>NZ%j4>?9E*=22ZsbuP16$=a`(2+(|pc|#*6sChUgjpOY`G{5KDQRA9k;Ir& zpjZ)B7iXiyS>ohKYTPNs5@m`^N$ufb$J>8fF`YzgD#6xvi4@@=^@7w3(p)DAXAQdE zwpt6ZCA9WoD|Ji+TYOhbQYYwymNcSUUxQMziQX)zw6hAEehs!yScOgS2HPoCVN;^P z_9m;asnlTG&nj#z8*JsQLRU5`)NNrkc4IWyo@SLs$xt4vbV!wjtkNr09%L14Ak?3G zQ7LM_8HAg!=(Kaw@DIh!Uer$a?#^JTMcx#C!ilW(<{50-MON_T^}ds#uTd1Byp(^! zz#vvOUdC?el4 z0;PllV6(axE_MmDMrZanjvAX~04@M<&WUDLk>|t-R*~n#5mu4sL=~&ZbE1rA>z_O+ zo?}gPQb6}ptRl~e6|5r9iELJp=fo^lk>>XROQ=Hl(mAsFa;kN2hAK!(H%Cp7# zV@P4K?uvHfQ380B?&R&2c(g9xdWE?2=D|K!DBr~Ei|L__-n;b9q|H-VtK;rv>n-zp zKJcyqbYN&NGEkGc`iF>9_9J(3B(q0#LP06=4mod^^ENqeVY$^F)hq*za$YazC*}N@ zoY%>Djht7@`5`&qFXxqVULohZvsd zYPtqgX)HJ<<8;Xih4rd^6hMVEgarw$W68y^$h6k6?A+dkVJ%AS=?cJL6{|K;6sOV^ zYz^hs+(OuUum;)&_uB1_=PXT?C6CGaH>oXoBxOjHFVq*_5%Td^6k;KHLz4JPa&U+d zpDjbyPSVVT&Q8p!9*kpGA`1R9P>4k#mKF>sq|-tu3i-4Uh{7&f(4cU32H6yzDRj&r zSHd3Az-FD7{cW0dKlgzTB*gf0`5fXKn@ zQ%fw7-YBI-#*V6#MFJo)uxc%<$+NkP8qUV{Qk4Tg3+wrPIeBDXq~ZSm;x&DQSVS#) zb|~b(!)co0M06ogKQzecLl<9KnA*$3UhVyQA6_^)ll;Z-zR)w13^pDR!e)`v#+?IT zVpF~Uri~n)L6*vnEzKjVqVCnB)}*G+(hD~p9zucO2F#qtZb0Ka@_E!m^n6fsG(IiS z2wd&M(Vy@>Olf{lRem0ci_xKNM$FU^0ITvg$WJ-N!DXn^$(EtP=RR7)Uc` zVFS`pL==74i-DVk)CIZSsRXlux>iMn>7-4ila?Ess#z1uP7nQQ-J*eVVjPy_<CS)5L!+#!w`&5NDyC1hRTU1GVF4pbYKDz+X!?3sdXnU2phMF}2fImKiY6ZJb*-{# zu?ttxI(;#a1tVn1@Zp0|r7vUvGn3F1KCR){tFnp=4Cz6VWZJ<`A}uC8pG0n(2F04bWquc@YKmuv zQ0d~?TFL)Vsf8LsD-3-^Oo<86XTPBW>}Ad+dOAdhHIhJ?)Pnj)r-?2pIN@IoAOO-= zQ7LLFPNn6KY5BwAR9}=oq-9v3<+sR^q{!%9SY8pDZvkAsi(=P6x)Iar$FwT##4nK} zNfxUJVQeI&rKOAA{=50x=YU-o+_cwYE20-IOF6%rk47M;tN-xjig@*|{@iI^{d#}y zcV7K|f9|NDzSN)lK~Q)1=U(fhe#Vdcx{rFNANLQH`ZYi9vPxa=$KlnV`hp*KMyUw{!%I6gx5b6I1j@x!S?=x+|M?CjAuO^d{BWhP9Kgh2N!0y>eH&wR_ePDHSf`wa) zRE>q92I<++7VaQY#;i;(V@f8MY_V`=q=G!@O}7Q*G^BK-ddL~TZ9(EqcvXsYkI7OS zzr2LsZcg>zQN~^0QI515>1B>QZ;p;c<@%1&>pNZrgp9T#dztg$u2)wey+n?h#|^5n za4MuUI22ZCp^;}-wXW7@LMR{F8foEnBke<~MruMjh4gl0?Zkq zqaxq5+rMyEBV1;BbijOhyfu7_i1!=#T9S1C7<{h0e-u9V+@B=GwvmhXr})&`?Jr?d zRW)5A5$PeLpVc%#YSQURAN-m1mZL6aBV9RRx8Fdn8s2WVJ3=z0u#eC|=1-3nOrMbt z)02d}&&VI?!-T*uNc{AmepA})_7|v3!6kCf12OzZB<}%jzpWSScG^Kz>Lv3014GFE zbe-UPfrL&=5<1S2naGUi$rfbE7s&h5hUs6tVz&<-3~x50J30tbmja+9k}A<(wA)G5 z>>#3>?k~)~!t9ovv)k#eth#=IOrM@8?D~v6JAD`#H9fdr#d*8^UD~wf0{Ik8xyOlD zM!4{|<0Kl{vEyWFMv}1qI9ZQu?Q!xB!1m+hVn(?7)8lsgc=BE52p=8f!;spJlaVvV z33E=6@yp@?Gv^9}i$l9BTes+>zYhrO6(M+D29WJbFCcBZXY9_~#0Gol;b*p9g;A5+~T+?0F7AO8r_Jw zz%0O8-LOhv>A-HdVJ*P2f%Up!nYfGd3h~vU)rJ;sBfhmnibhI8x({g{(pscaq)McB zklK(skZvK}MWUDQCfqwn^om7pMw*H=O~&TPd9Iv4fqWyYDNku!hj(iLh41bY=ILsrX+KgUQY%uxHjEEa9TL54*8kn`bJqXe@MHYx^}iMVaK3zoo)50Q{qWnW;Ck<@ zxzlE?%6&XFW9rOVt7c`Ta@-0QoLth7tu4<; zSM1PcGoQeFn z*uWQ%0ZZuTxFtg;p(W@4DUrQPh6Y2!T8~7oE-|QqZY>~QONUZFDxHapTWYYPRwt+2 zWsfddxG?MStehtk{uD3uq8V-fKa=RGoP4wNEuvZ;;$5w?aDR@Z2iDd;q%zrW`xX_? z6R(xqtd|pmk{(EUE~z2ux1_`|tH!)K=BqJ7lK+zY+PJghei%1ke9HLy$1k3^V&b-m zJ0{jn{CMKIiDF7NMn6CL@aWG*UmxAqG~e`; zX{V{tbl!B$bkp>MDL64M@t(x2#LbB>CccuiY)oMCq2#xd-%Iu$+kfn!v5{kA#x5DV zZS1RK*Nk63{vYGN8Q(Sj=kZpRxt}?}Jk)G9PcqLmuQtDGK4SjB+-kmHzGnWx{D*nu zgwYcUCKOL7o$%6x*CxC@p>x8m2|rEvb;6*O*HXGt=+9R2(4*mTN8_%=O^E+BUP$ms zs2P28v}g)9#h4OI+u-6J(*e^F(>tb9rVmYLO&3j9P2ZTlH~nn-!{im8=$AMkF+4Fk zab#jr;>5(MiPI7vOq`#%IB{j-6N&2+pH1ABxHEB2;(^41F>PaE$wIc}jf%{W&Wmkv z?QtD(opIf9ngrj3fCOzqNJ3bGE`h78y_%=zG1BSVR|g0I3AN&CJ5TeVd`&u))+87`sw-JNA4?PDVN@Javb)e5t<6xF*5035b4~h331)!A%T{>@=)p&h_@8qP6*OD*)4GsMATpBJiTEfGQx3*N zfh5)Wk%E`>(IFn{(mm95!0jI+`y{0^ktm&qNScR8J1N|45CSBD7!QFd9s+IT_HF~; zO5Ut6XyZKimO!$4x1Qv_Bt|zPPI6D=hdwVq}yw4@z7h38>H$pO;1c23fGjpv~~0#0HXepgaM}Ax4?wL5T?@ zHc+mElFKOB9u#9B$$VK)rtJ~=SVmduLD2=0dQgso(oF&@4ca^pN?0I?-J>Vb|DbW9 zl(im|kU+8vl(dxnICgb-RNYZ{0uk@*ob`OS)90X%87_pQgbo!HQ%yr{_k@&qrhd%NZ zgJAO~EdWaaJ_WE6V3=m{vfM>jCeq29uS9rFg5n;3Y=nc!53dBLW}-SIzlD3 zT@3qhSy@>t7A#xIt#fi5>rs!xL#$KRjtn9>2hxOG6$v=1$BlLFfPsII{B*z|R0fdF z8a*)|OcRc&NNb%Q)9clPPQ2$}8m}UOuMXZ`s^M3XM-D}JsQjKR|X=8-#*DYI6JQ zM#1F8dUlN5`??HgkW;T8778T1nUoxf@Ol$AAR_mRN?$y(+`or~nRd^F)!mzXSsN_0 zc+oHlTfNAZH}w1^^7t!!CEGdpC~((+5Sv(s>x_IF`Lxau6$wB7uyfoJe&Oo;tfdR^ zSh;BR$c5AryY|DvNtk1z=C_ygWyJreL9l4pFeH-OZ%3Fh}VfG{nJi^cFhyzq6e0q<-P{8I8{r@)!6R z7LLBglHnwjynoav#P+4LB;a0WhpCbIfu!`1mQv%6Ef>}@3jY}S=dlQ{)vyL!y34H3 zqV^2l<-6{(oj`t8Ak{$jM!0i626A12d<7&@=g#>B$Popi!F;@^K%xf%GDSMX99@Td zyWU+cH1=f+RR9@!+#uYEB$Kg$E`3EL1;<4^M9`I#!{!38;>SSJbvy|BGX*u+O|VI> zJT8(sCq#aZ`||o6dHzI%aIZ*ePU!t-!#KTg;KO{?;sh!z6v>?v(L#Wp=uR#cR*7Wu zNxfhdNj0)-@O$3V`!9t0IZ%xw z5!9!V$94r%jmf8=--q4VuaLr1Oh?=?X*|C_WfbN~ZM9^~KO?*jKnH9%mLn7k{<&N@ zZxGhHNGPtWUoP}Yqyk1dLq;`346lKW&%l5AUQzNok&(z{!@=H%IEqy zjmZEv)`@`3JprkEoQNwf)I~a)EyxCQB<=LPe)K1O_#dFi9$2;_VuOigyGA(XL%u(a z9l}UT8%<=~K9OX8Ad=;cqBa`OUdm%~nM69fS0v{_vVmmsAXP}DNB4?+CYk+#K|9%l zvR|V7TqTmYA4PKG15rE8MUoF0+CIe6t|ze{irRFzuJi;NGQL?(PJWo=-Y84P^&zDv zLW!BEc{wR-GV=4t?aTDAu>G2z!L5npk>i1wJNGslw4%$rW5%-AbrtJ33QqKPD)F=)Fz1Ui@iLOQ0|KpM}8T8&4CTHJ>71zD?m@aMk)jdxJs{PAROvxdMUlLgsU++( zktCcKwTC?jzENy|^@#s&kZM3`^dM;^QYA_N$tD0j&(poCu%No;$+zVgt{ zV{Ig!`V@g+PgdWh#lk%H!_#EgLrZ5M-fxd`(78i@Hdn6!SbA&<5r$XL@s!J_F{ zS97D-lJjGGQjlAtEF8-wCn(vMx8ZFN?qbsVu@Bka5h?(r_wibI9MdY2($B@9T-Wf( z^5bOVp(MXu6!IlgORpr6n9CwRohb)MXTGJwD6|Wt=dvEpWJMhYN~ZdKFoo8CE)uUV z#GpAI`X6z2ZrT?jx%Igytdne9{UV9%xgzqjd!jZNlu56Uq|d$4U`E3LYhB$ zuoJuXHIevsio!+-P4_2lK!3d^YRxXI@~~`WoS+OG^W|8|3rIa#(rM66^$;jy0@ydc z>M)R>JH?=BE{Ytf9nPLi{8H2&^BATIsb6QmObT*ql!f19y#$5!^1yW?`TVL8XD`}I zfaqmVh=;G$22^7royWH;(b ztlm!kje5v!9I?Mo!$bU&-y6uz+jOm=KDUyeP}lZ|czC4s7V`LQ1KHjq-e+^|aPlAZ zZUln=S;Dskh?fxudnID_K+=4P-;a)mg+Mav#~}H=Odu&j`R@Ke@^yu1H7#|`2Kh$2 z;qpL!)tiYY9_ePx%34Sd!rWcw5t5E~Cw!t8{Xrbm;rbVl76r!_Pv{Q6CC&&S_ffJW zmX*acbH*t5g2#y1JNpiRu80GX&y+X!r1pf=!NfS zWIewFsYA^bMQsRvUeu{j6b*>}&7aGm@jz-6s;xjaDmZ(Aq$$S!8W4K9qId_0ayI+o zt&TQIp?VO7Am%bp|41mqpUn9=+`1V>3m&#yIxB&2h`I}Tmm-|b4fza+3Yd#?8%T!2 zERVmYq7LI6Ee9(INQZ*6-U?_62(I{T27*<@O>8%i99an>gsU2eQuRq7OP#^O``Wd+ zSx>QF=ef-P3QmEOL-m*k)0wL9XajzaNiSE=wgYkOcar%79-N~sCN93S$jGS`@eA6(EjHUg~xLUbCfO6Q)n`5)uidLZNyTkODNi z=Hop;=;aFfLqjk!xqzq=Nzq~t(sm#*Xm|BvKagsL)3<@tA&jmSl*7BXN<}y5p9jY( zT$~n;H3Xe=GoK66JRq)6uLp9DeU0vL@p&NGiWznm$W}l{TtrT|j*H514>1*ZZ?m;yNrq|u3FW#Pv;Sy^z$J=EWU<3h3)Ke>8Y{vxi!stB5( z!``6inGQ&+Q#Dl(4`dxUuD)gg;W&%ixUK}URUvg6NQeUY6bKi9wcj-zzNQc^{JysI zw@~X(I&68E6_TZ_6^m9Z%=;UctB9&kBnDogcRCQqu|}Fw4+F`DT3VBk$ABDDNWBF_ zxx}_w0p&o%)lp85bwm-KNkC#1ie>?kzR=Ri#t4uM=y47F>p3An6Kkp8-NI*J43{Gy`!B<6$5g#SH!sh%z!4fcPpjcNwkH_ZTikgFwhv z^mRTE=?hQC=vM-XQJ6miWD1gNt!hUt&Z#GB;euTHkKJr^a`I%^Pzy+Q1p^f z^b<&)LTm+)Lki?=Ak=@C)6GD3DL4ZWuzCeD4@ihr0W|>HtT2BKNTUMz4oDsBxm@(d z{CB(@0TtIEASV^Qp9@5V7MF{wfaD50D)?~i(Ku$Wn&RX#3 zs?}IKGZjvc2B%iB*-rstQfSTrf-!W9^wU7B8pXIC0kmHs_A?NAxg6^MC){ODhiID~ z2t9q!UP(P01Edl)*9^`9;;Z014TP>|Zu`lWKb7z4gGqUuHaXqMdOUyi%7rWPsxeVq z!*UfIdbx(>Hy~k(xM)V=j#Rj+1yZI!#sXzZTm?xj)~EA&Jj&WC}NDPpuF4tI`C5u-J-YL`PVcp$F= zX;wt&dmy_MdVU9@lT8a89sJxyE4lp&^Zny-=cp8l4DnK^U16LLq{7LO-<)vs6f@)? zI2zV_o!r->Kw6wq@PoSogkG+W-2!5Dya|N!xcVlr%#9QY#G)9E`9N$6H-q`Fziv&l6jr(KM%aWgVe1ETHn$CIj$ps+*KG$2GY%y&-3QPtus*G ztcb+RKw1?1w}G_53(#aw>VeS9Em}Y_fw-0s71lxJ0;&aaQsJ#W6;PhSm<7l&1u`2* zvckoMKsud>)pRgJ!wW}qeE5~Z(I@-!KY1VhAejHVPkC)JA98e=j&D$vkB{Qx%hyNo zGs~|>@l{gG>(RWRI@&Ot59y=J%EKf3g4IhF;-^;mxsPWpTbZ+HEz1A>FBXKPteqqI zMD5Z=3v#mX!~Mtea~48Ai9X(x|8*q)@A5ZB@ z%qJf`634IXQ(iZkA76eVo*#7d8592r&m1g&cLX0$ekGajdvse8e~H)pkIo#Om&_OQ nNBfQAgZc8DVf?sq|43eQG=DrlmiPZptB1|}nexpO_~!ouUav`H