From 705bfa1058837ae60f014458b0a01e88cdf5839d Mon Sep 17 00:00:00 2001 From: pwpiwi Date: Mon, 22 Jun 2015 21:45:28 +0200 Subject: [PATCH] fixing iso14443b (issue #103): - increased DMA_BUFFER_SIZE to avoid occasional circular buffer overflows. - minor code cleanups --- armsrc/iso14443b.c | 93 ++++++++++++++-------------------------- fpga/fpga_hf.bit | Bin 42175 -> 42175 bytes fpga/hi_read_rx_xcorr.v | 4 +- 3 files changed, 33 insertions(+), 64 deletions(-) diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index 1ae1692b..416c31f9 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -17,6 +17,7 @@ #include "iso14443crc.h" #define RECEIVE_SAMPLES_TIMEOUT 2000 +#define ISO14443B_DMA_BUFFER_SIZE 256 //============================================================================= // An ISO 14443 Type B tag. We listen for commands from the reader, using @@ -717,16 +718,16 @@ static void GetSamplesFor14443bDemod(int n, bool quiet) uint8_t *receivedResponse = BigBuf_malloc(MAX_FRAME_SIZE); // The DMA buffer, used to stream samples from the FPGA - int8_t *dmaBuf = (int8_t*) BigBuf_malloc(DMA_BUFFER_SIZE); + int8_t *dmaBuf = (int8_t*) BigBuf_malloc(ISO14443B_DMA_BUFFER_SIZE); // Set up the demodulator for tag -> reader responses. DemodInit(receivedResponse); // Setup and start DMA. - FpgaSetupSscDma((uint8_t*) dmaBuf, DMA_BUFFER_SIZE); + FpgaSetupSscDma((uint8_t*) dmaBuf, ISO14443B_DMA_BUFFER_SIZE); int8_t *upTo = dmaBuf; - lastRxCounter = DMA_BUFFER_SIZE; + lastRxCounter = ISO14443B_DMA_BUFFER_SIZE; // Signal field is ON with the appropriate LED: LED_D_ON(); @@ -737,18 +738,18 @@ static void GetSamplesFor14443bDemod(int n, bool quiet) int behindBy = lastRxCounter - AT91C_BASE_PDC_SSC->PDC_RCR; if(behindBy > max) max = behindBy; - while(((lastRxCounter-AT91C_BASE_PDC_SSC->PDC_RCR) & (DMA_BUFFER_SIZE-1)) > 2) { + while(((lastRxCounter-AT91C_BASE_PDC_SSC->PDC_RCR) & (ISO14443B_DMA_BUFFER_SIZE-1)) > 2) { ci = upTo[0]; cq = upTo[1]; upTo += 2; - if(upTo >= dmaBuf + DMA_BUFFER_SIZE) { + if(upTo >= dmaBuf + ISO14443B_DMA_BUFFER_SIZE) { upTo = dmaBuf; AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) upTo; - AT91C_BASE_PDC_SSC->PDC_RNCR = DMA_BUFFER_SIZE; + AT91C_BASE_PDC_SSC->PDC_RNCR = ISO14443B_DMA_BUFFER_SIZE; } lastRxCounter -= 2; if(lastRxCounter <= 0) { - lastRxCounter += DMA_BUFFER_SIZE; + lastRxCounter += ISO14443B_DMA_BUFFER_SIZE; } samples += 2; @@ -770,7 +771,6 @@ static void GetSamplesFor14443bDemod(int n, bool quiet) //Tracing if (tracing && Demod.len > 0) { uint8_t parity[MAX_PARITY_SIZE]; - //GetParity(Demod.output, Demod.len, parity); LogTrace(Demod.output, Demod.len, 0, 0, parity, FALSE); } } @@ -892,7 +892,6 @@ static void CodeAndTransmit14443bAsReader(const uint8_t *cmd, int len) TransmitFor14443b(); if (tracing) { uint8_t parity[MAX_PARITY_SIZE]; - GetParity(cmd, len, parity); LogTrace(cmd,len, 0, 0, parity, TRUE); } } @@ -927,35 +926,29 @@ void ReadSTMemoryIso14443b(uint32_t dwLast) // Now give it time to spin up. // Signal field is on with the appropriate LED LED_D_ON(); - FpgaWriteConfWord( - FPGA_MAJOR_MODE_HF_READER_RX_XCORR | FPGA_HF_READER_RX_XCORR_848_KHZ); + FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR | FPGA_HF_READER_RX_XCORR_848_KHZ); SpinDelay(200); // First command: wake up the tag using the INITIATE command uint8_t cmd1[] = {0x06, 0x00, 0x97, 0x5b}; - CodeAndTransmit14443bAsReader(cmd1, sizeof(cmd1)); -// LED_A_ON(); GetSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT, TRUE); -// LED_A_OFF(); if (Demod.len == 0) { - DbpString("No response from tag"); - return; + DbpString("No response from tag"); + return; } else { - Dbprintf("Randomly generated UID from tag (+ 2 byte CRC): %02x %02x %02x", - Demod.output[0], Demod.output[1], Demod.output[2]); + Dbprintf("Randomly generated Chip ID (+ 2 byte CRC): %02x %02x %02x", + Demod.output[0], Demod.output[1], Demod.output[2]); } + // There is a response, SELECT the uid DbpString("Now SELECT tag:"); cmd1[0] = 0x0E; // 0x0E is SELECT cmd1[1] = Demod.output[0]; ComputeCrc14443(CRC_14443_B, cmd1, 2, &cmd1[2], &cmd1[3]); CodeAndTransmit14443bAsReader(cmd1, sizeof(cmd1)); - -// LED_A_ON(); GetSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT, TRUE); -// LED_A_OFF(); if (Demod.len != 3) { Dbprintf("Expected 3 bytes from tag, got %d", Demod.len); return; @@ -971,15 +964,13 @@ void ReadSTMemoryIso14443b(uint32_t dwLast) Dbprintf("Bad response to SELECT from Tag, aborting: %02x %02x", cmd1[1], Demod.output[0]); return; } + // Tag is now selected, // First get the tag's UID: cmd1[0] = 0x0B; ComputeCrc14443(CRC_14443_B, cmd1, 1 , &cmd1[1], &cmd1[2]); CodeAndTransmit14443bAsReader(cmd1, 3); // Only first three bytes for this one - -// LED_A_ON(); GetSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT, TRUE); -// LED_A_OFF(); if (Demod.len != 10) { Dbprintf("Expected 10 bytes from tag, got %d", Demod.len); return; @@ -988,12 +979,12 @@ void ReadSTMemoryIso14443b(uint32_t dwLast) ComputeCrc14443(CRC_14443_B, Demod.output, 8, &cmd1[2], &cmd1[3]); if(cmd1[2] != Demod.output[8] || cmd1[3] != Demod.output[9]) { Dbprintf("CRC Error reading block! Expected: %04x got: %04x", - (cmd1[2]<<8)+cmd1[3], (Demod.output[8]<<8)+Demod.output[9]); + (cmd1[2]<<8)+cmd1[3], (Demod.output[8]<<8)+Demod.output[9]); // Do not return;, let's go on... (we should retry, maybe ?) } Dbprintf("Tag UID (64 bits): %08x %08x", - (Demod.output[7]<<24) + (Demod.output[6]<<16) + (Demod.output[5]<<8) + Demod.output[4], - (Demod.output[3]<<24) + (Demod.output[2]<<16) + (Demod.output[1]<<8) + Demod.output[0]); + (Demod.output[7]<<24) + (Demod.output[6]<<16) + (Demod.output[5]<<8) + Demod.output[4], + (Demod.output[3]<<24) + (Demod.output[2]<<16) + (Demod.output[1]<<8) + Demod.output[0]); // Now loop to read all 16 blocks, address from 0 to last block Dbprintf("Tag memory dump, block 0 to %d", dwLast); @@ -1008,10 +999,7 @@ void ReadSTMemoryIso14443b(uint32_t dwLast) cmd1[1] = i; ComputeCrc14443(CRC_14443_B, cmd1, 2, &cmd1[2], &cmd1[3]); CodeAndTransmit14443bAsReader(cmd1, sizeof(cmd1)); - -// LED_A_ON(); GetSamplesFor14443bDemod(RECEIVE_SAMPLES_TIMEOUT, TRUE); -// LED_A_OFF(); if (Demod.len != 6) { // Check if we got an answer from the tag DbpString("Expected 6 bytes from tag, got less..."); return; @@ -1020,13 +1008,13 @@ void ReadSTMemoryIso14443b(uint32_t dwLast) ComputeCrc14443(CRC_14443_B, Demod.output, 4, &cmd1[2], &cmd1[3]); if(cmd1[2] != Demod.output[4] || cmd1[3] != Demod.output[5]) { Dbprintf("CRC Error reading block! Expected: %04x got: %04x", - (cmd1[2]<<8)+cmd1[3], (Demod.output[4]<<8)+Demod.output[5]); + (cmd1[2]<<8)+cmd1[3], (Demod.output[4]<<8)+Demod.output[5]); // Do not return;, let's go on... (we should retry, maybe ?) } // Now print out the memory location: Dbprintf("Address=%02x, Contents=%08x, CRC=%04x", i, - (Demod.output[3]<<24) + (Demod.output[2]<<16) + (Demod.output[1]<<8) + Demod.output[0], - (Demod.output[4]<<8)+Demod.output[5]); + (Demod.output[3]<<24) + (Demod.output[2]<<16) + (Demod.output[1]<<8) + Demod.output[0], + (Demod.output[4]<<8)+Demod.output[5]); if (i == 0xff) { break; } @@ -1049,7 +1037,7 @@ void ReadSTMemoryIso14443b(uint32_t dwLast) * Memory usage for this function, (within BigBuf) * Last Received command (reader->tag) - MAX_FRAME_SIZE * Last Received command (tag->reader) - MAX_FRAME_SIZE - * DMA Buffer - DMA_BUFFER_SIZE + * DMA Buffer - ISO14443B_DMA_BUFFER_SIZE * Demodulated samples received - all the rest */ void RAMFUNC SnoopIso14443b(void) @@ -1066,7 +1054,7 @@ void RAMFUNC SnoopIso14443b(void) set_tracing(TRUE); // The DMA buffer, used to stream samples from the FPGA - int8_t *dmaBuf = (int8_t*) BigBuf_malloc(DMA_BUFFER_SIZE); + int8_t *dmaBuf = (int8_t*) BigBuf_malloc(ISO14443B_DMA_BUFFER_SIZE); int lastRxCounter; int8_t *upTo; int ci, cq; @@ -1084,7 +1072,7 @@ void RAMFUNC SnoopIso14443b(void) Dbprintf(" Trace: %i bytes", BigBuf_max_traceLen()); Dbprintf(" Reader -> tag: %i bytes", MAX_FRAME_SIZE); Dbprintf(" tag -> Reader: %i bytes", MAX_FRAME_SIZE); - Dbprintf(" DMA: %i bytes", DMA_BUFFER_SIZE); + Dbprintf(" DMA: %i bytes", ISO14443B_DMA_BUFFER_SIZE); // Signal field is off, no reader signal, no tag signal LEDsoff(); @@ -1096,8 +1084,8 @@ void RAMFUNC SnoopIso14443b(void) // Setup for the DMA. FpgaSetupSsc(); upTo = dmaBuf; - lastRxCounter = DMA_BUFFER_SIZE; - FpgaSetupSscDma((uint8_t*) dmaBuf, DMA_BUFFER_SIZE); + lastRxCounter = ISO14443B_DMA_BUFFER_SIZE; + FpgaSetupSscDma((uint8_t*) dmaBuf, ISO14443B_DMA_BUFFER_SIZE); uint8_t parity[MAX_PARITY_SIZE]; bool TagIsActive = FALSE; @@ -1106,7 +1094,7 @@ void RAMFUNC SnoopIso14443b(void) // And now we loop, receiving samples. for(;;) { int behindBy = (lastRxCounter - AT91C_BASE_PDC_SSC->PDC_RCR) & - (DMA_BUFFER_SIZE-1); + (ISO14443B_DMA_BUFFER_SIZE-1); if(behindBy > maxBehindBy) { maxBehindBy = behindBy; } @@ -1117,13 +1105,13 @@ void RAMFUNC SnoopIso14443b(void) cq = upTo[1]; upTo += 2; lastRxCounter -= 2; - if(upTo >= dmaBuf + DMA_BUFFER_SIZE) { + if(upTo >= dmaBuf + ISO14443B_DMA_BUFFER_SIZE) { upTo = dmaBuf; - lastRxCounter += DMA_BUFFER_SIZE; + lastRxCounter += ISO14443B_DMA_BUFFER_SIZE; AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) dmaBuf; - AT91C_BASE_PDC_SSC->PDC_RNCR = DMA_BUFFER_SIZE; + AT91C_BASE_PDC_SSC->PDC_RNCR = ISO14443B_DMA_BUFFER_SIZE; WDT_HIT(); - if(behindBy > (9*DMA_BUFFER_SIZE/10)) { // TODO: understand whether we can increase/decrease as we want or not? + if(behindBy > (9*ISO14443B_DMA_BUFFER_SIZE/10)) { // TODO: understand whether we can increase/decrease as we want or not? Dbprintf("blew circular buffer! behindBy=%d", behindBy); break; } @@ -1142,7 +1130,6 @@ void RAMFUNC SnoopIso14443b(void) if (!TagIsActive) { // no need to try decoding reader data if the tag is sending if(Handle14443bUartBit(ci & 0x01)) { if(triggered && tracing) { - //GetParity(Uart.output, Uart.byteCnt, parity); LogTrace(Uart.output, Uart.byteCnt, samples, samples, parity, TRUE); } /* And ready to receive another command. */ @@ -1153,7 +1140,6 @@ void RAMFUNC SnoopIso14443b(void) } if(Handle14443bUartBit(cq & 0x01)) { if(triggered && tracing) { - //GetParity(Uart.output, Uart.byteCnt, parity); LogTrace(Uart.output, Uart.byteCnt, samples, samples, parity, TRUE); } /* And ready to receive another command. */ @@ -1172,7 +1158,6 @@ void RAMFUNC SnoopIso14443b(void) if(tracing) { uint8_t parity[MAX_PARITY_SIZE]; - //GetParity(Demod.output, Demod.len, parity); LogTrace(Demod.output, Demod.len, samples, samples, parity, FALSE); } triggered = TRUE; @@ -1217,22 +1202,6 @@ void SendRawCommand14443B(uint32_t datalen, uint32_t recv, uint8_t powerfield, u set_tracing(TRUE); -/* if(!powerfield) { - // Make sure that we start from off, since the tags are stateful; - // confusing things will happen if we don't reset them between reads. - FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - LED_D_OFF(); - SpinDelay(200); - } - */ - - // if(!GETBIT(GPIO_LED_D)) { // if field is off - // FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR | FPGA_HF_READER_RX_XCORR_848_KHZ); - // // Signal field is on with the appropriate LED - // LED_D_ON(); - // SpinDelay(200); - // } - CodeAndTransmit14443bAsReader(data, datalen); if(recv) { diff --git a/fpga/fpga_hf.bit b/fpga/fpga_hf.bit index a4d72e373bb59cfa56cc3869b1ccb3c18908250a..50c7eef97c8b98461b7d8be9e4e643dd85910241 100644 GIT binary patch literal 42175 zcmeIbe|%ikbuYSRpCfTRGx8kEGEX6f9F2rCxFcySJKz{u+LjGfgA>$*ByKBAS-q+r@H4-5INIapmbyC_lHcqOfv>nUF7(?J#2r>o%x(+YTp)MV$Ac8nl z7>CIC*ZZ!0&YU^2livJs-{-y0r>LJ#Sl!w_Xa8F3yS{6!eMIvTGv5CZMQ*2sU+n+= z+yB>1Uu^B)eES!EZ)4k+zOa$*plHWemS_IAJC|iL^aYA_WR`uTJ#&3~M+a@Bc^%7E zt+-*;M^@195$)~2h@bC$^V46Njgj2o6<$&b$XV%vgwSG7Eh{< zLcC~9n)*5A$YXSox;G|fjEnOxQkP83tUX5;@9Vxd@t847`Z>~m5YOpy@vmAST<^{= z8vNuAg%;a%_*JEvG{)2BrbYz|$s>AT5QZ_q4wBrbT(jPr*UD%Mge5YX5ho-2$thr_ zD{;i|<3z5ZhgJJVYm2xNLQ{5li+I_3LNyh7w+PF7POlZGckIq}@r+?&7%NKiGsXnH z<78BNnNctJF(j|%d97ZTxYNLN>~1$UW1N$}peKf2czbZNHp_iRYIqi1ZhEEB%7R>6 z{9qdvs$)2QVDL?Ezj_xeriZE3wfeIw?Xfzo63m!yijEvfH(~*J@;eYzE3Y2q4#L@p>*NKl=U8U z=hFovC7xFMo%pcvp7*X^DqFLnt3IKOGR;z#@C3WlY$xLwR2V;&Jw<1zYh65#Z922N zV-tiHv~0qk2-0J5zUAW zir>}TX6Sw2bv2Kc6kdy(?=Ya_JjBlSag%F(HHm{Qn{&~xh?M^v>l*rn>Q1G%7#DNnYMB$Cj$K6;)V^|jOKhp& ztsv`aZ4;aXpRrkboDv0N8mG6@Z7s&eJpGcMJv`+UKFgHWZ+xwv@C+RVa zxh@M6_c%4XFpQ40`8leF`?T4>^zUTn-Z?k&jJj-F?~fpkB9N=7i#%L ze1mZtO%V2d*7y?wqWxs^?7|sa_W^#{kErJ3)-JK6;SDn>vAk_SwD#lCLn4GSu%n|1N@S}uTw5oHQ&6Rj+ZiJEbpJt zSqY0h2fxla-ELwsc22!P5XzX~|G~mc7{A_=EAbrTL3(qb!`-3xv{A3vq^DnuUx(~w zxA$t%Lc?xyHtL9T^r+kJV(_QDyC!to0#17g+PDvlOQPt)SXT)qpzpkN&R1;&t zHO}2`b2$q9qJt_ug_e@{9LBF1>TrQyJLpx)umJp`&T$CGyiH~NIw#wC7N^ApZ#sGh z$I%kPuUXmkbIfZ!Jrn5~fS^zB7#1qPulwl$wT@X?z}650nG`2j*EcH2z`Qc*gG{zjpFO_z!7FhlPmA)JLg##(mZZw1EWcd7O{3>**_$$UHdR}%H zc9dZg4$CeDAbZc0+z0qYv)L|63>jrHySU3v@xO>BZZDE=Eau3 z6L!@Y^WLTL>$lrv>`GCqwz`gt=If{U{IJC?hwuw6v3+8%`mPk~@T-mVsMLL)_V$AD z3;OljvAi&8x7^bgWl#V*^a35mLilBNIkzff4^69#iYw!e-K=O3-ZJ`lULJnIy!RPD zr+;?4vx!Ln>)FUPpMWI^;n#V>boz`24HNt;^)?)jy1emp6~7Lf$u3L50w^k^VoJOM zM1uuT;(2fGj9-tCBYSO(c_8BS#4u)wG0S;8X04}<3mCr&65iJmG2kS5f>UVm=I-Oy zBCM){mDpu05l5X4iSh6{cgfbgG4115WG|g@x@7yk#<&f8I2QDQ5XLXr!8=%>Qtv1M zzp$rhnXimzJpD@5r0AfPRI%R^A9Y?*$-Kotc6f4+sw;?RyuD!j8dcdNu}t(XCr3`! zVq?BMpX4+4jHh3P2=FU%`*^IJYoNcdn)$2R zvMhk?WmvXl<+d%xo1T6#e!WAFA5W--Wx!TfK2cnFlHRkrUWCE-@rz&&FR1QU;+u?P z@`YS?KkQ+byr`DX#Ag?}o;}p~Ww(x})V~ma*1%4Hc zG<<*?*dG4WdzYfkbhaPXZ^(E>oau$Ywr**3SXD9RQ5g2lE0TS_E5wo($Xwd5rIoee92J{A4a z_{DvQ=D})WD<|NbY<929RP>ALHsjP`UIoLU?U4>V2V?#zS}-pco&tUtzs|E6EXQW- zbCK25+7CPb3vQW%U+3M`<@AK{L3*BUaN=iT-So2Ro~fHQGM;`Z`=s-z(*`dW-p=!fhJb@uodTJ9CrP>z;3)*g{o_fp!O*Ah*7`lb1ogSj8thUXBTb3i`_ zb1#UDw-=0GXBDj0Vk1S*sOz)o1EQH;!aCO#Vs?msDWLEq(CU=aEw7j~PDyR>3t{{M z+j8RvjOoZT&MFB-V_&Pooj-!-IJ`ck2%~3`cjt}1Z7>eE)Qb|%#vT`rN0ommur1fJ z>!&FvQ!>VT0i<@LPI3Z3^?Rvs85B%Z!qf>s{$4 zoVDY0%Eow{x%}%xZsKiYR$Op+kE{GU}$=WQBnfcc{y&Y>{Nm6u5b+|hZE}UXz zbQ9l;E%o-RSNn%eGS(*=>0zuyxY2;k!hDUo|u!3rxFy&m3U$-T)%TSOESN!Y|MYic`#?lG3mR7TGr! zzg`CxbZ6U-8wbsc5(jeELhvuA>to<475s`!$)h%C&Nqw}`5fV3Px^QP?@r@LjB$xPFeS@p!{c9A9|bGH z3)SlR&!gN@;a|Wnur1Io*p08N>y`CA2)f1T3G*-IltH_qOzquyjc^pT#;p`F(tbiA zf@3V3CL6yhK0rh6huwKw;FvwEZlA)&`TUFV>w?-}NKePQ1o&6E?zr)Px)+Zudo>;6 zUmPpI$t*OVgfrRY&Mz82Qvm4WbMfovYI!!X!RR1_p~{I_o9ozxW*Ov~PE?;3C zS3IJ!`H0tNGy1@WkHY(sd^Rl8^0dhoE)}WZYMY6moC{nQo`1;r#TH<_GR7fvFw}mI zo{g+#{365K_p4{YwmwAdu5p@am;0d^{HKCnwR$g@e_c?^ogF2d!(Y(y2=x?N-S`?2tf2k&@+kbNJVO0z=#-$k}gil29x7>eRx65AiSjD?BHfl8@5T z0@mjwp0mWAH-~?nm6?_CLq-dHzr&jnyN#3P8RsBRuo^$KFOGLp`wSwS7wLKzaLhdA zMi#>H!`==X|EesXw6&sPPo>`6Nguyz(zIVD7sfh!-jq9Wkl+J6i1ENa&*5MDW#PJ5 zXYQ!^fHNeq1rz9#c8xjw>xn&0sqI^OUNY|)xOU3w6^PDF0t@EwuXo5X6U&|~(ZA9P z8E^3T7oV{Z|N2EscipWspPHqM@0%#bo_GS>|846LgTSVoB}QiQ`wa%-jSWwo|;PVg9vj`N)IQ#u@nx;)n6Q#x(G&16CpwKg1CQe(iwYi$fdt zfNb8S_;q$STS#MxXDW+qJPVp2RQMNdG#?pnyEE2c{60P6w8>jEeyOB{eGc%eCGx1% zwjs7FhtQ%8BIaS7?i1jbX#=g+#O&xzCc_raD)^V{un@v8A7PUOo8Tl=GY@{0F}KRU z%(o+}B}~CDVCTDk`-=S9Df+q6v#8)#%@q5PGSL@nv7aLi&{GZPH5P>V*P%!o#R~Nf z@C)aV1Br)5&@zXA?NjMjFdfr|iIY|czbgD|5%?FDWjni<@QwSdZwTO5i(Z7MJzt`* z0IPae*P2@!Vjp&n(&$DIF|>GN4)ZVF(mVmG*qOzq1bybW#9qbg z6XIX6hXcLS5B!1iI3-n#`Ij$*`B!gRrU;?wqJ$045bQ=lpRp?ciX60B3%zd72GE=) z_m+O4`4^w(5dV5ttz!}0l#E?GPV+?vfJIs zHj~*6gb@EaY^G)JuxKKLERL{!Hosre_Atc19>knul>-{;M1t25kKkwUrSz1b*EOwpA1bGsAmPs$sNB zyD<{3`2d_S*m;+CM_EFI`4`+>Xk~c~VB$zr;W-@NK)kN#?S=ErUj(|>fsNJ!UDtA1<|cwNy7N$ElU~u4yUVVysq>@6)O2Jw}$x_#ihbOt$LC+g2!cvSol3kBFJ$y1mhj6=QPCG_)O9OjKog4%Zv?PSN} zyy%uY=kPB*i^Xf3=*HSEH>R3_U(}V22l!Re{Hs;P));;A;Rpl(8StxBA&}_fmjeIN zBitYsY5_hi;)fXX@Rr&zeo>k*R8HEmtlA2GEztQdmG~~s;d^G6sw*^u z=gO{p{Cjip3urZ9Fa#v%3Kxfs1KREG+7SO@41fz`P47F_r-ENz{!7;FVzW$1 zHq;OzZELV!g}L!V_))r#8=FLK;`_2)La5>w{KGam4-jDPvzyk$`mkRQQEMNB+ydST zKmVoK7JOQ{hhX%0@SWJ55Po5Vz@|wy?;iN_Sp{Lacknx&el-HWcwXqU0vLx0YAiqo z3PP>Ncl`Vp#gvhS-#g#Kug9p(0g!#&)307H|HTMv>cOY_#ETg7X4zBjXpJ z=e+nLge5K(;dJEtDxI}#akr0O96v;!F<~$KaLXAJle>ASX0R?$BLw^2C#}7Gr&?k;N4-Yj_Y*t*&`!x~!ve@K3$BQ4XE+;k_ zF9B|LJBgLXHTM6dR!=3)8cRL>^7CJ=QG|;HCAv!6Osodm%n*LDJ&aGI9sojiC;Rh1 zLrY?IFoa(ZBYs#1wUQ7h_SM`!XCJaK!b{?Z?PJ#MP(38VBz|>*zKy7UtUnjRFSaf7 zR){CnevuZjmEr~XQEfA^17ZAPeTQDW?jYB1Ckm0D**}#S&rArvcsixTfx$8h5`9k6 z|4!GGt|&s|w0-vTUvA0*gPcnm%E-^D z;8&^UI@<2;u~P@4ooZ*JbBadbxN`i^+FOkueu8#k7S|oBjf+9bP8wIEkB)Eb5kdU$ zL(b6grgPTE1xg_Dx0g8)Mh~+vjmVqi?PC1;C+aBGIfHR}k}_^$0S3kq&a^Y=*Xwxo z8{MV$bB+AKG^b3auuuINjeMug?WYe*AQGj z!~qtohch~M!TB$=WGnc^@x#AWP30)4qWkdf>s~Q7Bwr>lva+>Fgz$@_8P>iiA4s@` zoqP_}o{iYk3Vxw}<4v%wwh>sr_h^+$ybj}Vq0phyN zU($d_#f2OJetl7Fb@yyZ-7l8lXeB=hL;aeGAR!lWOjq#Bq`Tav zZ0~Wg*V<|=?TzJgPtkWJijMAsg_OL8mRUo0$)-N*w&*=HKq(pH_~CAe>WBvThYt5a z{f6a6GL$Z_-9sgHm|&>OREB*{hxixbhdH3tuGsI>8F{@#{l=8|XK^*7RlvV~uG3y= zj@La$t7WSfxYI-|h#!touCV7i>tj(eb^MUkY7&WqlpC$a4|Ul_sxOE97i_{jTQrz( z?AKU*)%f8Kx{I2nH7Q!Gt*{AzEtCGdr%9quC4Ok{6-QmX{oYuMI7*#x1~4$Jd=~4R zGWFbb{f5&ecjjXg&KV2#@R8V5PV^Je9A#&&%6LHLS}FAD<33Jg zaRf7+wEDN*Mt7^*-Nydh2}hsjjTQY$A%6I@T3%@VPsZ=cF}3XW`3z*I)qYsEShR{? zICbjQA!Ayx@!Y8cZrIZ*e#u1_VEy)I=l|GvoGuJ3eXzVac#Pd>{Ehp1y|o zq4kyA;&lha9cEbe#^+BVfv>CvJ8*i@*tZFl{nOVQar0V%4sJS)Nf4Fo3cwKz5|s3 zshLddWt$KMIux)eK7P&8bN2F0n`gjE&Jo->HkHUUQYd~%TWE*#09oUMS?loewlU_* zLI(tZO%?pwymruV#!`7*iUS}kig9hs;cGeGepzHia^xsjiI3rAq@|8;fMB{QRjuDx zk5iYCaocb>RVT3pWpZ(T&_crI^(kCEE6xe_asgZKGJbKujf+p9UjcqypmDW43;cQ) z2LO)8jIoMda1dXeMdyBg4)R}YE*N1?;y{9SofAuGC)>I?@k5PPOcisK&RHw!Q}&<@ zY|4b5}daxTEA#t(s3Pn6qd zj0=KEG3Gvt&BcB(5zF$Jz4}8~bvEzMVBhO9MoPXTGTbuh>8V$LSeaK}QpQhXJWqJ_ zHm6APbILWF)jpVRcn%XHheepznTt9azvjdbzpt9g)|T3r>FZdQ)Ry|IOcWxbMU=ef zFn;X=TE#OM&zP0Lcm^$GlZ$S8PW^c;Y>0pgyV;6s3;K@ zLr$DZvV-b|jWYbWE(c={;)k!R^M&qBiEkP2vXDic-f8oU?CQgq1N?f8j&PYD@?TnE z5wB|@#6=mGgZhnE)$oYUe10C)>Nj2lHX;9ol0tP?Dk-fOk>uKE zJL@p`CnH)<8y6w}B{f<#pfmdPi4`UjRU`^4@k1~FmBrha=yi_gV^}fLcp8o$x*Dyf zlqQe7DR0wbvV9K!D$(^6SFk@5s6VW82Oa6hS3~hb55J&R$S*T&G5^v;>=|z_fM3Y$ zx0I3pnol`}{Fk}P7~W4=7pE?WAAW##GJbtkTupb&=82TU`7iH;PkYZ9u{iB@1Lwb1 zi5Cz*tlMB*L+_|%bK-|1eCoWj>N)>VB3}sj*So0txG@Vi{(71KY|TGzFrtC)%o?tb zUkmd5c3$2FVn?x&xz#;jWYD-*J)TQ+A3bLMhCsw4aNK^9t~b zBX7%9oXZZM;Plxfc*;d!18j@CPGj7FxrGi;lY-y7(qc21Iv`p-MphI-{ICTrD9_8I z=Is#dAzZ$6*3Y?=y}htZLZ3a-vZE#ynGO^+KwL6wjY)($nTQ!DG*5vL!Y|AV)iuVsp?^``*}9V6uetd379pKi0$N=(|4PA* z6%qH_u97d##jhfzP@Z@5g#5Ew1ZPN00GohTVf>;;C z#t+Zihh4@U`=4sN?x-7%OwhAMov#ex*LigVrnB~31Jf={hxwPb{8jvl{6gxi5Dox! z^}s*$&g!N3CEQzz;(~LdOpn!lSDbYA*PsGtPX24OA?Mzbp&j<}Ogg*jTJ0aU@w`Iy zhoh>AGe;bPYcK0q+(WAM68st^(5_|14*AZ4&fYfC`7Z$U9Q?Xqf5^S{ZR1?u#d_@5 z5#!uCj!|QRleJmic3nU3uF_}K#k?dh6b>zT_Z~qMFTdJQz~hN@QTq`668wq)g@INJpH^?&-6iLL3$+kzJmYimOSN&>@O2QeHV!1d z=J@q>75u7UYs`pN3)pHxe4_}E^7~Zr3%*3UFJ||Q1Gd`MT-P9U{h*z3ozP=RTLm z56e`duFU)$D0K0Ck`R6&GlI02Q=+fq{G`eNvcnN>0X9iK&m2E2seRS6aXDTHXXc z;D_UfsCu2$b{=uj(ycS%wGqsewJE@_3xw>+DcHjc;yJZ?CVs{^6}gy)V;{mVuJ3Ih zhc|cv<7pj>{ulA%K8`3x=j6XIW*2>4q#<;U_SL=!)YB~ietB6TSds~LpIn^PaoUes zKIm5nzh+%sm3I=3P*-_=9z5l&^7P%anOr~bmu-v_4&+$u{=sR)5B0pl_=SH3OY#=e zu5xxAX{~hC}5K-XHU;o_@It z9<0ptbwFF2LXq>yN=pd8{1e4Q1Iv5Bc+K)#Lipv+VnRSriJ66`>0+eYz4a3QrFU?u z;;#Hmp0#z$r0MW^uH65^?o4rBPeI_il(r{h59I>>wH_p#=V=g=3z6`SC+OQF@zH0)>c` z{R-okcQQRV#sSblZ#QvhZvCOwZVnr^DgfDJgRk$Q`omz%zVH&j7h|4<^RL&Za{r6* zi;tg*MKGQHW|~){-qb#ucmJ!4ecH2{b|pp(1~T0;r~Xj0t#THJ7NCHm^-K5{Y$hxu zoA)l+mVdw#&=Tff8k@9P)@9*rpXczenwCln{|W|wCV8&X62>pv4{Pj0EX6`Di4jf4 z=HSQXTj9=|?UVo2g4`Y3E@T;;u--TfPNSs#RN9WjNh<{av`V&Ww zXIJy<7T0-VJR$t@Y1g>oD-7H73#V+qWe$Gn`gwLmx}8KNr-@8@7{6!_qt!HM7ZPC* zY!>F?mkvz_XN&|`NrV#&Vf=bHAB4eM-CN+8nMmxqbMfn9L9;C`n_pc(A^kB%GzUTm zzs}NpSKCbAqy$P7!Y|(*`m_s)Fo}x#0)oQ<|GJ+Ttq>B#{VyB()pzf48~HeSOSazU zL`3N0A*`ldld-IL(LxOsI%9%bzbf_f(5B~+n}B{T-t%lmpF<~%Um9g#=atUm?=s$S z&d@3ejSKi!Fbhw(wO}BSXhH`W?6jT+`LDpXOd7M2D~ooP!}#SRk#Cj@;&pGoc7^e4 zZXd4(ug%@Q4~JI5tRg-iub`E0H!R*$g@`9r{KIPg3;1>EUR3y3_5PQpT?%Imj4T2J z;#TqNoD0}8VJc@_y>UM_>Ip4woFk>$uT%DU7qGQB_KrB}-sm7Mnm7J{w&&U$I1G+w z$GCnTTOhaVbI3rZ;A?S#^tvM zXZo~oXW#4s51>Q*%fT!*#YYVX)9FA7&034+#abEE&p)Q_q4YXyxrj>y635^KHVVWp zB=o(CUjk!(Rj2B3Z5cxHD!OL~gWnRyFU+)@%7{87H}|-k9un3tT8?7}L-+-H0=Ct> z^bW*n3-LElNY90ci9&2ujl+B4)z32)aM)0KKnA1NNwh; z8JwWe%te^`Ieh;Mw4y(DzxXh1b(43ZKB0wMklPC1Uq;KvkoHYp$c z%%INvZ^aq)cors(feen~uE8LF=)qQ;(_Uw&y)WL^yx5!9OGc3YDihPLVS>s4wo<*r zn9eYOEHxC)e|aMmro|?1xIX8Pc|kS*HH6hjXHz!r+N0j)w=f+&cg!ouf9d$4t{z#! zgO}<1V%MspW>ugkM-6i{pn1q{fO5#hSbo zn^QlJG(p}PLAv3vY9F>xw&84}`NOek5%u(f`4>*q474c`8C6;^xy6BhSgqf{F>cKx zez-VuFxq;gcT#+n&;l&TrM%~G{O|`VolS2TywZ7BbvrDeW%V72>FWLEzb{}q`NX}k zsUckZqMb$9d2KvZn18|g%_OD`6lQ;8by@v!^JlC-vcbQO8&ruO-tTGC9pGOmi&|Ir zDbe6?Y|xqs=fBWGvHs+739?4uGPlXUwf}Gu5k)`$#rTDpQY@2v#zCG)&C3WqcNdu> z%d@K^iyo_J_cZUtG%f_K>-{NqCta-Ozb1GV3a);MT}L-@ubx+D8IEEVzXYn~W&9cA zl=Zv~2$(c(pcf+DGx2PM)@h96`(I2e;6A;owz=(%Fc(X>t2}!1omtmj?Ltpk9r-qH!Ia$rcsDYb|hq5$7MM;Fnv& zdx1z`F}7A7kr60A72)WJFhgRRNPtX6>`MEWols! zfw@=TkLVM&>CV_W`I_B51UG($UZm9~0*RAXWVsL5Z@{X%^A8NBts|6CNOx|+0RRCn z8Xxob0`-SloB9!-N76)D*=R%bF3}{1C2+^#=WzWY5VjoMl8e&U+$J9LCupbocG;SZ zO7A(~UjmTrrgjN~2Fs2j&b}&ILMf^|XBzqCm-Ag}KG5p!=iQ8I*^BXv(e)}_F#fCO zlQ4cw+W~AnZr`f?D7ujn5>B$#9m{@Q(-VANpv5^VmTvkw@-mp|s9c|4C_G(O^u->~ ziau+X@oj5>@cj)N`i>K|#`;Fi@z$BYzXAQ~N#&z8=5|^tqmyC(%~?Z%f>0UTnNtlhu6|dDKkf*HeT<^S5G4)Q{Emchr>ztN4YR z{GeTA^w$s5o(6n&qlt$5kjEdc-2d|G4_jqwvc3UOi~9Km0P%0CCE0ltt@q*^-u-1% z^BzlnnxL?f@tqY-LUWgRdr?4y^UQz_8@AAqBN;9`Y@r|13RxG_Z|M3%r^1C@2sZ5D z8`QO?UBzDV&PIv~j8+uS8Ou!6ZveiCg1-`WujatRlrwq>bH4&T8Lajf17EYT-qO9N%zH@ zUHD^*BXG>dffv0EdM`$-E9nQjy9?rFk-U4RjE>q#4l()Vr1kPu?148xSp|?_l4Pe`FO< zHgB!CH|`8tEtAnqrGBG;?{EA&qk;?nNu9SYMqsWBJKrNh%N7q!;g@tGz-_P?6jourBu z3C|%0aXcr>?~;pL^QWfHTm6(?aXaeMMdJrRqHB&J@@9HtE=TsK{8^x`Qgz#PJ}F+8 z2*(d4SNCC0U!gag!@D7D)^{TCz!yFJD%G?hm8q}ky+S`e>J%`Hx7qmPA3P_N z|N3jWA7BgjY0|zs-mI4PixVag?TFRibIMz1m;OR=g$agwmcBOJR9LzNcdo(6${2Im z(=RW6sOSC`4Z6u0?CEnk_M=jB^It$uL^Ix_F}c6+iNe|+15a10cqsq%D$E7r*TPrD ztkYF{g~B4B#eshq;1}#F&?=EPURTc+Mr9l^E6e9!LHuyD&Doq-zWyihZ8(XH?{91s zNXVinwu)c-bRY4W*dBqRAz8+kdC_N1{k+t-y`B{Lb`gw1i>FDr&IX}O4ya$P}YWJfJhWm`5zV{*>CZ z{d&vWQ$?@SSs)Sm;5xR%#-TGKwF|8b_}AHrZJDJP+~s3w6u%Yt{&J!W)YI=8Fn=Go zqpk5-`j^53S(w3}F}HdrR=C60FBNgn=Sys{-(+LH4t-8SKrX2OyCE@T#19Gc+U&ye zm+Wsr8B>`a9}Apn{4k60_*;NDl7#s>2|I?tW6XxP?^o-xc{c{DZe5_&GBMMn6Dty9 zp04fZceypE^Ak?Dz%E~~fXgltpx0x+mSf|p_%-Ej+uT;f2;ZV@DtQ{Pm84;nbf90= z_@OhfAT4p~IA;f=SA?&nD5aoZNgux!?G>P$GFGVNDevJ4GA_dbE>!S~7L8NM#JBPa zm`=&Yc$hamORFUIs~SIqtwY+Yy!M>9xK*dUxKiZ?g>M>!`4{700ck;fzkAe3DHtLF z#J5d{=U%F5 zWmAgh9*Q4655IS3HkP92v!m+c1%vtEsuAp0kpFt6cD7gZuUG14vn;H^2Vu+)6LKY0 z{F01Tu#ijC(E^0~jd8Setf5f;>n3}v#QDjKD}Y~GcpX7PkdZue$L4ir{uXc%R zZKxG@K22YPw;Y{>-H_Y|@r}Mg&VPMV-v#E2%;L288a*JF-d54CLv>#$l-}%GnlKH} ziV+R99+1tK)%wF9<<1wdO)tg9>F2o8m6$|w6Bm9Ziqd`j+Ev471^j~F3v%7{2biFV z(~Aj)zQ0kXVUzI-VMAPGwgF@g5=QNeXhHov)JkdmG9$RiEMtA(_{h0rF?dnIuLpAj z&Ys?wU5iWH4z9(4R}Sd>SH2oQ1kY6+eYfVDTWr4e#S89@hxwPb38~0;=&a&j4YE_g zLJT>wWLMA5doPI}@|`}!4;}1j39*6+)r~O+_473=d$#qp4aBDEKdK&=NP9W>hz%^j zFiunuKirHHg>*xwK&`cefHUU&8MkDjLHw{0#~A0CKVhMhN?Ev<_i=RY%Lw4;Jsq*? zHCo*|8~Z#63t(%5@gwnnv+!Q^{#QYq&2}A06xTke&HINGe7|Yhn1@XgOdOW?S#bSvM1-M9ry{NDkJVL*w-KMz5!-9LhPKz6}>z|kV*z&Ik;)e_VfsTH%Ycj21 z2G2_Exa#|!(}@d}_+g%YDrQvYIHm*V)?LL$4$T*<=rdma@Vtr7*krZ2&I-r8Tquk(EBj-y)RUHKegzkX=^F-^$j1dR*$*Lm8m+Doy~ z+|=;aBgsV{n3ZI}n9_zrE2Vmzvh+1o5I(j72SrJ;v0?wz>JQGMLND@-E<4bW1I2(Sc~VOI5`$Qp9ZQ!zaPbef(lZ z77u?v$^rix=Xu!|9n4GDZ*cwm8&&)|nJeWwCgL2rKN{&M@3_}UGk&?iiy;4XzZ~kv z%>}r8;+_cN8_S|`>xTqf=I=gb`TV%_b=o<6tsXNb$YTbO{iQeN0Kb4%*%sHzB;S%8 z+ljKj@mDzE@HayE^$h7~;WVMjUVXiQfbB~V9z;aZdsi>sHY*PUwwgh^@?CVDGRlr- zWNrw*=%|ah*0(S(6r96m8Xp$0{9I>Vi65F91w#_TVn0E>9}4O7OOXhZ{2^Z>>*H4h z_(h1lgLW<1uJ)kFP+Uu2lMnQv;5>*Q*1%?N?n^a@r|281z=^P$2rAEUBdl`2vXcK= zkD*dYIg!M0vxEE>;$v<&{{^1Xk5l(9onMDS#1jVcL@rwHuizK+FP}wzgn>iG^K13@ zd;4$>tMNmjuYHk7TEo&wrM8Kr7*+)*Rk}3)HH?~MH7FebL#{#mIV$RhKUu}Ey&Bfx zF)pF4wfH{dq-e1I95>snzAAoUJXtS(Xdcas%K2Q+4+X)%s`#}Ru+=HyI!-NpN1^7V zKBnV`yeUEcOHoPc`~{Z9>4?+;o$y6Ay*^RTKjiz%+f%)E_~A=|82GWS{`&&1vrQ%r0=CZdcBw=mray#8n5mCn z{Qbk{xc;zo#k)Q1#wU))x~%gGh*mP(3jeyFPzK4L?VWM|b|V5EYsBI;uX$({s^4Jz z8kScz`aT${-*`{K9_}@!#o0ax_+}Aeak$`C!0FZ4#Pu7@w&KSSHU#}wiGI+N z=ZWusg}>jsHQVM6Zxa`wMC}SRIRiWK01eNC^ItftYyp^m!I*u(;4cMjtPA-1M;Vig_01Lhl#&mkWy>sz21}Jh(;*2ETCY42tc~My}`EtT;#}PN4^z;k-%YAe>c_Q|G(JuEhuPlmgb0--X4;(znb1&Cq?MECyEkOtN z+aO{{G-F;Zr@%pi_+dTq_j_X>t;e$rxWEWewFpf)b0w?Z7j=4_v|n{t5E!Km^l9x zbC9aL$4sjf;)l-uCZ`19SOvfSg1)0#%drjkWXU-M6gl z;jK)UqZ||7&wF}Z_5Si9ddtG``&Z+m3J0<@t<1xlB??d#pT6Y?2PRgUQV;!bb;WBUwVL%A@ z^|Ys7EA2Nqtl?Oyp34qFy8vVaE8!sj6~qr;RQmqc2Js`yr(I;DqJyFw^Yq?@_@RG) z`7{Dt?YO%Q$9}8X<|2?7#1CJ?s)Fd;&rr*pQLi)V58J+VS^eQRn}hpbWe1(9?psy- z+9$M^i#m7Dq_F?&$2Wrf7tpF9sc!jpF6A6{+wutDWPo4I84BUoW*n_OZfs?AzQX4V zC!m7~ftK;>GGZHfb_`ph2%p`s1R!7?XxCT7Vh0}@E#aa{fL~Y9Q)*cm=Ibi@xmum& z?>?y)3d>Ic$i4^N#gBFMUK`~NTs4I9yhzus#Aplww@g>*6SHCb0^2IbkK#KO=T!F! zIQHF+A5jeOD{o>8$odNEH&BS^f(9=3B8p$G#t*+q2k=D>@UIsMH6AK9Q@dCbF;sK} z_ytob(`2o{mT*lD<{pP{?6_b7B{Rcg9$B;(lnPPn9k@<{!50!Uz^{um>L$Kgtv{TW zGfjZ4#}>Y+&d9DWqiAhHV;qcUfM2J25Wc2_J9tWJ2$(TC#S4+;lVSY&Zzisp{~-1d z)cjG|R>FANv$z8_lbQ+gUo|Fn5V3+{Zkir35#K1Hq6s(9-Qi*tzbr(DM(Brdd0sCN{P5!3?{6^ws=!u1+e3N+hOvrY$X5<@mk{Q?06Mum zi~A11FX}GOsh_tVRqa!p_Oc#v_muFdMr6qqVxDvB=i!^es-tF7I=G?>&Zr{;nb7@Z z9bd&PPFlb(?#$VC&By}$!gP>=WV1}?8OVS;@&))3m}wQi;(ng!9KAi(J%#DKE;JDf z=fALno&2vrw}(ghfgFd_4orYwX^f}c#TJ~T!-|);rv#^&gz&x)};f)#k zg)Ii3;|q`2t=EMUw*axgnUQpd2#(l(M3k=n5SPs{k%?l@n?HM#IRpl zn5@m}^IW61yX5bC$1wR46x;^Og#%az7g=Rzu_@Y>oM;izIMhR zyq-mW6~BVH@6RnM>qYQeKI!RKsD2*TzT`ppv>LyFXim6(L$fWwmNjdw(m)3M(uj7i z_b&hMr%0q@^mQaR9y0g=er-g4M~4Iv-^eCq6yM+QTcQq(9DX={$bIlD^oi_YAglDL z@-Ndf7wl^xsnoZ$a{nvFu{ix4@9(E{IrBBtA`u4s`d9bRupV=OUmBA7cIKN=$RWFK zXCmh6fSVoWU)-Y8dFOX)UU?dcCkT^O{9@Q@Bg9f5$mG%(fJ_WaScyyWUw~RYX1gFU zR0KMxg@pjW_UgGK8;H5PoG8R1Y^5bE1o-8_Xj(6?)Z^jGnS&BQHm82Rb4@$?SRk03 z_8M1j(<<&0@Gtfc^=g!DeGwH4rT9Y}@JZ(6zuFXFYub8TE@j&F9$Pr>bok0*WM98PT=LFx6;E{Gp6 zqHU_?zaFeu^^-h!cjo~Z2j((3v?2b5lsa3#3v?R)JbvC-p)?WOgg>C8{RI8}d1@WM zrJ`Tf+o%z`hnDep{PUO=R;$-b6pfQ>hIV-7eo+0WSa^8#WoXXjK|C|8LyAG7nS;X{Az;r%UzneD(>xa zDF3xtue`SNXYhd$3=D{uS7HKh(+bLp|nze|fwT;p-cwqH^kTVtL*mfFx6DU-5E5hn;z|qvnOmvf*h}XeP~h=q z_(+lNW4@h#!fg-Xm!fB_jvh9r7D75R`Z@2^Uy5Idf+|*X^`>ge=Maw3qJoUN9ySwb$d4UJK{%7YMcPbAYAaC(~G30OGO2=;y?S< zX?g;Ik%jPU1a(AR>k?`$(-VCTF?X-{KfteP+Cm+)K2I&|kGIWV$3aj`qkU;T#MepkL2nc z_{RR+v8R~(F>l{J{6gV#T38C>QM}+7SO*L5d3)MRGjy6(+wi0MeP7+1AlteS|H4-( zvWOla|25W?g{fpqJIXe5%zKyq`zb1U8z2c`Ll=eg8l*@Y>T-pDwb1vexzF-S3Ymk5 zDQjO=_X+Y}4fK%Rv@SI%u9tV^TQ}-MyH7e&V}U+~h#wYar$<)-wwgpqc5_(*HU&Ti z;VnHYZFP}=DDLkHS=e@vz#Jm;;^&15$H38O# z7Vc)+MLYERSbBXz`1SQjGs+IRe#34qV1m>1mwF7+iH z&t^iu{Q8YUi~f;t|9vv`nDIwU#5_B8mhA@OEdhS1nO=PV5Nu1$X1g|cHi5Aq;9tmp z(Rt_2a(o6{2Ei+J1q0bHTJ|$=_%Ss8{^6lQQUROr=X9>0~pzu|izLHzJ7dcsaRuvir*o`yCx#<1I+L+X;jBJ*!as5Z@IcJcp+Y$W}RD2=GfT(zEzvcni2i??sh= zS@?>6KEYeS(=kr_0$PIj;e)&yGI)-4-(cuD4zFRUCJok~RQ`ApZry$GWc0v_Vh;au zcEvJRBFu_;S!Q)!LHv;US5wx9t@PBq4T58Ft&9bs_~E0JQ9f)T5#}(EF+&XD*JFql zKCzC=4tZWq}?^Zxqy_{IEdf2!#OG(|hE&sd&*X(bBc zhs?h;TJhjp%hrFYjyV)R1b(58N5pAAJ6)Z*U{B}ZS4S~XK>Y@v!}vdF{L(-c;1|R3 zW(a2%2$(@C&Yy z1nttKraw^`JcP^Z554ICwsdF4xFCMW{42?9%Lx%N_Vg~{Unv&|i^0PtShg6ij#>MM z{Qcg2v{a%GPZ@nGi*QQ_zxeHk@%ETE9>7*Go;m#MdLE(wD^5!KdohQ9X|(c|1%IxT z7mC+sZ3w>(Q%)J2;^%A2DaNl~dVhHgWxagHpkFJi`c=WN$YT7eNp0sa-NTfgz(p{| z3w@r${Hwg|4pcQ-GF~MqsOC53WM?ZnBwuTW;xH-LD%Z5j@idAkAFFR^D;;ealsx^NP&I@@xupU z3PwwHGq}fk7Pc-uR2_2_zt{q(`5pwoROSZ*n-IhgJ(CjHOgNLC@kEQePIENx?^m|% z^6lX&7e!EkJ)FzG%nt@Od{3xPfM2|ogc1mz4i0UqIxkKbNCa{iz
aF>5%M+C8_(G-6 z$7*^8`U~}M`4oNHU6jE^6)p5b_$*0xLB^E9yhy@5F$uQM z7c2-C|Nm?JK2K#)%8>(;c%)jP#;q zk*bVY8d*9{*HfLU2*dc>J<`i9sxq&hVBS?B z8-wA9GTe$__SsJ?7N zW6d1lHg2KnyhusMhA$HFh1>#Dt#RyLv(o3On~mRAFJ?c|SjWP6c3EQ_!odC9QhC=? zH`m-b@VV?~8*84fxl?V(ex`BJ-B)-m&( zkN=#8yK9>6;s-8z+PqU)+23qj%-sC3c# zB?J9}Fi9=23A)AaR1;Yy*Y_`MFrQ+fkA<3L)GHU-X7HTmnoUQ3H}jbtiypX4P}O%i zgiITe!tn(PI>g}_2;AcTSnKXs(5P;1S}@GQ(9MzG9$uGap=m+Thi>XyaGQBkWP#Me zry;EAvu`s$9a$uU=iqODqjt#Ae+0ZQx5yK2%|{lJbm%}=DC$l zW(bZoKr=3TLeNJ^+CiVC=Enx=3+qM}TrT*JvD`Rm)0K&=zf6#}*UJsy_)O zeN4ugn`wc%T=4qX5h=2?i%SLB!BvhSfN?>T*uo+=z)_MFPQq}dl~pqpsH0O$ukcRK)jtg>IfQojORmYDnPsxe#J7`gj0LHQHA zDQj+tTtmO97L+d&DrW=xbqOv90A0~9iT#>`%K<<$F8g!GIrIvE7KqCPs?5uvKDQxL z!{~OYApPe6VXC;S;dnvN;&tJ3cnK~8l`1WjcSYpoY8ABj@48gKz8F?CzYo@MWn@0B zRefb&umizg!#;xM%Q#nA9l1Q^dmBih!1}%DdK@*&~gao8t=x zwNP6T(4zb`j7ZXOTrnqNj^Mp3((A!-1($0pLKT$k|f(DJtTBrdo2Q8KT3i)E; zJbpjq(y$eTWHd`iAJ`H>ZMmkY8ouU=wm7KVTT6x_?^JxI9N# zQ|ah-q;w3;(<;9*5^ob6M-83SX+LsGKpE>iIYx2EU;Z46}St<)vd5%q2WN^5@ zLW^Ap6I#H^Yhlbg(beam20Y_0ct!A^L&0P?ILNDr6{`sTc<>+p7rbBoQU-$GsbXL$ z&Q*clPav3%-||2FPiN=9(WO;Xs!w z!ezSrOKhh9uBt8vN?jGId+O_QpwuD3?-b~A^&eHG_jUP~nS%ds^}V_~ze>vBFG2A! z$xzR4{i;6ix4*vv@2|l7EAajbyuSkPufY2&@E>^vw7&$03I3A&kGu}=&;9)scz*@n zUxD{m;QbYNe+B+yt^mUM$TWQZiy2b*FCnTg=lwb>;rFk};47fq-+RuHYFf&F$o~V| Ce|JUz literal 42175 zcmeIbe{@{cbvC@`-jRHz8F{W{n{`A=`8+o`_uFIJ@f^3LU{6n&Z^ovGy?>`1Nb=v+=4sc!kI)v3j6JYBF>lw!~8U35YAlwvdbSLi|kPiFLTXn=pe<1@li5-gxY)Y>q#_TX5&dYoaQ#P_!PY@JMEYm>7ujLZO2CSJ0OhOv4UO< ztNxTikJ6b-dhFP9`Yc_b9*UKf@VE_OhSYn6`4G(*cuzq;MNesX&wdDJX|?kni@$23 zCP_b_-4fq^p0-i@y314ADSDh%a(~_=!EH)4>uE3L?Z~CtGc+`qEMhp5=<|pTVFp_a zKUQcd?awurBDZQUSzEGg`O7zJFVO+{nNno4HsQRd&xq0+W@P6Z@ZQ;m(_98uQTx~;m&Y5SM(C2*fKxA|OdHOrqR*3Ye zK4TP{wK7@!U44tNroyteeF#H-fRa{()Yua|_UFQCO{W)+(0Q>h|7^ZxnqHu;e5|BT z(>pXOV|o1@=ezo-WXxFI6dTq{G))jBgt8+%2NlMTVNTH*S}F9y`Y~}l*KOaM)A>oK zh~@M#=euNhBki4ti<`fty(+g(vF-c_@k}lw~2F` zW6oL_;V{OP7ZFn%4-Ik~2(;I-_{o?uBXqDKO*3*OclDLs6X@!8*;1kz>f|TC)cg6n zc3v?>=j_M1hbPh1Zo8$ZPleB{>gFe})()utgwUqcDWW<3ZTdBa1Hm8HF=xG2nI$?{ z-c1b>qc}**sNNCc6p`99&e)9_^bjLOSD%DnxqXJ9`s{qy;yrZ8jEg#FT9&P=-=XHm z8N0I<`9*u^j7)tznp-$!oT1b}bSK)JA?&D}KJDmNg7(lG^075gy(!~=unsdw!Ju*G9fgcJ0bjLXPBK~pl;%3LI`P19joCLx?~ z)*=D@+9&e%<%ae&N!!v~{jzwEo$&N)2^|p4c0_2$%wf8c)PCNVQu}$@eUGt}F37#5 zSRb_M$$Rd!Vw?4s=r{SjrTaGPuRHo>T=5VzuG_|}mgr3QEA@`KC1LV=WX&CP$cWq9B$o0XYS-L0x3kSGx%x#> zY-3mn!bmYLQRmo9WjDt7E%-6ms>5pK7nU^Euew6ZDf$gRDd@JYzAJyltZ{*^wPUv4 zPqWk`>IRgZSN3pv-T=Qw;TNw?U+4?;tX#p%gcZyvAS;K`+=lV%2*rvRWSQCImrwCI~3(4zPVf~7r+k*aY8@aw>ETPgCiwzT;`7Q!a&TXevN zP=#M_;n!o$5rf{MuJMQo{DLqCztp&nMgUu(o};nx%D9S-eldRWx^KX~Fx9y3)_+M) znQB}C{Cb>}zO%}-vEnn3Dc$k$3q6!Tt3Fz~=zwf1ZM(JhC2dPy^*MlFM|de4wK}QB z&iFONt6YU&?@*_Vl_IOmcc@#&b_2ieVIhcLP^-r%HmCyvgo|G@Vku)m6@GQH6>XKr zEeHkuRXUSXHZy=3+C{hv@Tb0NIT1%M^CI__cuh(=C$b!Yjip-1qlGj7_RP z9)5-PxTA=`Fgks9ehcFY;+HcUyW+qvH9vAfs`>Hot0n=oYR^Vq)i=?-1R%?6XW`_u z&&4llPe(4fY`8Ha)z&(JJ$480F&Dq`p(P<~V-d0IKS_7nY8(F>{T*-Y0a#JNx;z5> z`c3|NsGk0HdPY7B)dPP0P+ngGkj=rbn1yk@6Iu;5$9kPL+HGt$7r%({D+}0~)~;Rm z>|oCnex3148O9)fQQMkGS~KncWwqHi4`@roBj(lPkvp{jeks*^Idcu&MSpH@WBgKD z>Eo9L{MyGm^E+Atx~;NzFFnRen)t<~IW ztB-(jPGb+h!cp26=Dpfz(JmgB!Y`==*FU5N#;>y7j@p2Ri*sZ|?ko{~or@iF6m zEn#IDfc{pq6i7w(fPX370e;DSmSw{wP7F&3H$&0F+bC^ET7h5AcP)4b)+T>6aqy;u z%u3)_lXevY;siE!6@GP2MVAbbX3Mx8+Znk^d%_$AQV02$vhzj#9cKv&`e}>;i&6^m zue0}khAkdD@XJ)|RnR^leuD3c6h6I?`(qnZTBoBI;9szQ zNgHcH@FlRdOn~?h?Xit`e3j=PE(I2JOeOwMTTMG8K;c&HE3`#kSu&!vMPJo%i4U(2b^olxgU^mY9*c|H#y zo6=3iSy zdw*nycBQtpzkR@fKwHP-{KWG3S6K7fC?67SYVcdCO|7#QM!1FsMY2D#sQyYCf?zDF z=OUpub=!piP6Vi#}IIk_|)dvWb~?VP+m z9s5ZDzr=CsTo?TshV!%r{dqPkmg==JDjj zJ@cKh1Ha^5)ZAx$Tw9diO3gQA`yt$AH48k^9Q|rqJPcEbC-?|s2S>X_TO?GQey!HU zufnn{JV`@Hxctk(ug}EpUkEzM`1K84;aC4${OY9Wa3p0;&}xcG z-O`@NL`7}A-qEjw!mqf*Zb{I+>G+_L?_H+wOCh!3c~<;OVvnuD9+OtWhA^MWe#uDS zNk6yAhnkpw75fGVIw^bd z$(hJ9jhm2h1@d3>_!akJM_;pSKzn<6M1P-n!&3|71OL`Vhq7ynf>ou}q zCp~NePx~`P^amuXU%Q3_9im=n%ba;8dXV;0n+DhM$JV{nO!%muhN**$ThSYf`(rJd zpaQjrB4M~0nUqC_fsZ7$TlJ=9IP1>*3wFMQ9=@)f5To|JkLaJzJeBW$C2HyJcS!^_ z6n+&Rm=3=qK*S0UxLA;f$EfTx^RM&NBcr8-v-C`E1;L!o&?GICY?0QfHiO~K@G?83 zQPO59Bd?`M2`f4rY8f=jn&t5?c8%a8<=|r710tq;q;0fJ7!o=tcw9!!tXYZ2x0p58Q)o)>Rhx*A(o0r;UAR zIrHrBuVmI}*4jfuQ5SP1I&WB7+|e(N9|AA3#vU!%yN#|Apk2SDZPFUYds5E2JN&CV z4|PZq;$t~1+%L6B`3P_)VpigZz^_tl7wiUvkyx4W3%J}-jbC6T(P6kNc+b}w7~kPh z<2`x>zv##U_!~0bAh*fY(g0sJm?5Hv75swfhHsqHqQeg~Me}tWV>}F8Hg;=O_?1i> zo3+ct-^mZ`f$$R0q4^^G>Y}KH-TE(PSEeDQABQ%L&c!dp59hrMH{(|e5J=>3=mq*4 zJ65W~FX|qNX7zRr;9jXSiZ zfZC3HcC&V#1`YIilNR7#h-Q?rf|?kjWX?!w2%?U~HzurL{17%_I12s+*y_n)de6#d zfM4+RD)B>;_i9WIy~6w}+9CB)e8y0|dH}!948sk}=|7`0>lAEFv0Y_5ALL(#Vp2b& zLjpuBr~Qn!_Qn~=g7HJsZL^o+<7o4wHU#`a8;^g5nZhuBX^6!+{Od{JR~|rC6+fhI zD`x06mWlOiVTmSWCnbaNLxkYE2VyVkZyRUi4+J`YlFkWujKu(c!NuwZ16l|;25_Ja z#wCFu0sLaN)ehPfPXNE-%)cfe?1sBkU%@YB6W~6DX%MCW!b!SID75nNYY*#}fLq9I zzTc0rk9%z@_{EfJ(|tR(T?JrW4MK$9>#1ECZs9Og#Ek)EGla?I`;MWp* z#87Mt0=137AA8Z-BH)-+;n!(-{Y>ng$Ys`Vq@rCf0D$&du>gJ{rx5Bc#tuAiO0u1Y zZQ)oq_F)zOIxY8|j&9ahit~0)IXMF(1Ao30#4pCCmNDbbvBehpV?)1ATVG{ht-`NI zOgt%TpW;4qnO0J19ldWTln=*H*J)#RJ3@7hx$ zUP3tE$1hkm1zY+aa>mv2Zum7z`^J(3`YP+0bv>^}*|xkLT0zlr1;6f~LO-luLDT7; zd)w`Xf;JsK46wzM0Dc|hJ{PoBnZ;&f6 zX84feEE5SaY@CO z-=@dyhJj%I3*#!m`x-I+w}bCIuI`EGK97G*DE`%EH>9;DZA-|_e?0<3t50QI{v{Rv zYAYF=8}Ffc+~+SL=J|+hn=-y!ALL(J(%za{mY^Xmc@6xHNz6~XU7xDrU+4z<^S${e zH09hPBNpnG+w*!A|LWEdf-749G6RCkzi4d`zZeU0`c?8L*w2xj8b`5Ki|9A?0RLj& zFOsYOuEDu2v}uJm7#GG)=#I(rtny#{(U0msNZ(-Le!K@Uv~`IbqSk`jsQeelqx!WS zV$e(q(5_)~FVRg#qoyt3CQkl~x|hZ78CtRXd7+>-5B*xbBq}TX%ZsW-UX^F^*kccB z8|h4BhXsloun8`H_0_Ni z;FwJPFt8~pwwcN%wBm`+zZURF+eO_DObh0x5BSCL9}qE&-REEU_AWe$>;ay(r!nE& zpOqq+i@5l;DYOSqFdS1Kx6Xw9Hkbr+4t|BB!}F{V_^IixX(!E>)%>d?pD1aov=>72 zWoWm`f336{I8rKjo)v!49b~)@#FzEraua(DQS0&gRrNmq;xIVIp4P6QzYDk7m-g4b zNC(W;iMmuKz`p=n`SqLYFM$p!{6hXKx4b-mv+naR#bxZ61(y$mXtOKluBd{H1;IBv|19}XKlHUVRYwXuO{6JcdDUH)am@3q9U)Lz1Roq|u>Z6{Ou z>tVtD;rthDLJ^dTh4yjP22X5^E5N^CQcBU%yjFUadd6TXIXbtZIRCWn@-K<}7yO@N z#>lem^lwme==&)=Sy}o>1;0W`ZetrGyA!aP?e^t`+EeIroNc(zzYsq}1Q>pAmZ>ys zof=oG4N!378YWPEh!I5j4K7+bXY2+wrbTpXKPMD zW%5mR%QZIdunC>$^Il3YcHi#vFS#|Fmwko$B;h@2H9x56FpWYcMQQFcE&i1}DmzmR z1-)I&jKiSu9-9&1l__0#{Od7>t#LIRH-tNjglso;6g~VB=072}vzlV75Vv{90@xLX zlHxg0u%r7ChqU;sCTbe67V+H*wvLGQBKngA!Nj<7+M7Op$-Uu3CbF^~i_)L$!`MF> zzCTS8du)c(JfnUi`~!Q}6wvAtdN|jXhw#UQKu6x#R6F6kN7Zl8DjVTGz*avtTPm`i ziXtVj51-SxJ5K!u^%OS@=(B-2ciKgj%Y2Qe)H01NImm6oa zN4b6j5MVu~>BIWVsIF0n7QnBc$j)N45pgX95;$C>BATn<*Jo%j7w-oWg=uRM zfyAA0w$Ghxp9A>y4Q=-mMy|G1Qy7OD2B9!6fL~GUXR9BUAMryiIRGNY=wPkGlR*6N zdFpJAj^NE4KZJeWWX|MAp#l~BI!QkWcMrU8(dAs5(UXqt1Qz_-gisvv^Is>m<6#V^ zh<%8>IfvjFFFHAbccWtuIscWdVcHe92tKW)@C$ljVV(p0Yb&dj!@rW^X0ulH`6i6L z*U>M|e<4zOJ76m;VO#pJpLu?O?-l%7w8z5q_HQr|*Z;7Ejye4qy)~KBH#vHdpzowr zJPIF~NI|mhoT9gKT^rH(1hx@=xPAlk!_#76O}j$~n6OWx_^B5^3|~r_{@sPhsWB9C z*d6=p^OUv%;7(g($GW3z~e z#wFHW;8u~_7{9Cz?vI<3B6^hWrCkyqEir~o#Tkp?14x9Sjf-FD@MJh6tZanh?IhF5 zu}G@XhUEu3Jeqml$1lx>Uc}_(U3ApOdgU?CXGM>loQ1xpc`YPOnKM}|(=eNYTe|!8 z{m?ix5iOY9r zNpYlfoo$pW{Oj{{sD8JE>v)R3C*$eMo3&O;AzA^NqU@nTVfLEVpnhW#`7cXcZUGeb zQG(ah!!NGi2qWDf0qZ}2JclK?Kmkh2yRP&Rq z85ajlt3GRK6O;)7b1ifp8L^}2^D7>H?OAs?yBp}xJEd*4+6^dL3FE?(K>Y?vXa*Hu zeldEyue%ZX$|*Xlfj0%}Hy&bMNwE`pS#)D-ZLsw-7-@{h<=1cQp^4!XB}Wz}dVear zr(-*ZUdQ~Xyr+*}Ny^x9?$1>Ozt@V4^u7wFiP%L|{h=hQ1j`nt2bxiTXabT@SBXl? z3VvNe+l$TbH?Gz$yJT3lSvPNr|CkPNQmLwb!!`@y^`QvKA5j+p$i|ToOEIGP__bd< zz3B1r*c+d4iStnm2P??qDr#w7FRtHslR8VuoeNtv#EtD(e%>jm_A2npSue(~N2rOs1 zk*>z4E%pyF_CWpN+j3Mk z3KRnP#a4X-L%>gvjzREhN+=c(j2{}R+VC5_<8rH5$!RYH5^26r8_DGParhU?Hj2Hc z#owDP>-2K%X*y(qh~>0E{P2+3yzcUT?WA_sjw?4t{_v_Fi#hch4Y%iKrbiFQzW?o4 z@B6n%c{Tx3uWG{fsY7cFzsy~EHC~o6@$TopDWEg>Z z5#gFi=evMkM`$;X6m==202;YJFftx{fPeLk-WbabwX)slkLL8NK*Us^tLrz?r~$@W z%kK;6nn@0`(h@7%kE$ArCvB zT1Jdl5ON1Vb0G1Ai#s*zXvWlxVx#Xw(iqkKWVwO89shJXgzEo zx_i4;B-9^LB&|I!IV&CU@r(Hv;%xm!t2QVmTzuu9Z)5)a%vi6kS zU5-7f{|a`jV8e0s@rym!u8-fh8*bqltGln^e*G7oO$gxEJL8@CXi2{W;eF&Ley+bQ zFTgELmV@<&@OGNABV(-++s4MWc}=Q(NcsgF2ZrsS-J5sp$J zl&6H%OIn7K1VDn##JCbEFFx<&zmR1pL|Q%numoGD?7Xcz>)tSHplpL+{Z1n71;GX+ zx%SZKU(Z{}c2U%hbYlbbaN=?{{;Y+C3*gtU!dr{+FB*T3;NOwq_B_D%91=#=^@o71 zuqFE(sD)aAGg?TF^IG`$_0Xzq2C9{EpgBjv?Pbi*DQ6NY__g2+O$xS=Ee;&tw`1tE z_AGE2>*d$aAC{-ZYnj6Q zc`5R|c8NeBu?oKoQ8cd!w^{mnz*g5d(_tdtyi%& z&3zt$Jwz3XfH`%?W$OQ^Ju4M1`}nmTJ%pxMihn`PRU%AY&AJn)Kindl(?F}G=yO{c z^&8)!A=%7*uHY99{SlD*8f`napIXZKeM1an0sQ)2{KV1G9CDEfhOK;Th}P) z*euhP+E&kZgyEz5&p{w~p{1Bkz64d~H-IIyu`|@?5U7>b~4S5}*=(-BO zJ`x(Tt0fYvyWf%wI}4>Qo|}8g@{tY z*5U9EaQoxq*H+pgcJ*6O<#X*&z6bpeIG+ z`nVB&z)>_me)!MyQ!!d@-|pyp8R4Tlw4W+F*5c#Wr1*F0lK=ccXI%Dug`r78a)E7K z1-~@d4Z9)R(gl;!GB&@guYz4wzOlVd>EIyZxZCu&%#JQ}?O{qwnJ!`R@hcI6izVtZ zY{Tg)cJ*5=ZleR^Jp3{UK7RkSTv+R-v-7vhKDUu$Rg;6zwDh+n^;Yyx>JnepxX1$w-Q zy1@YdvTcN~pE5eJiJ@Odp;p}a1W0iOzp`QWDve=niqj~B@GF`_!{1 zdQv}Sy_4^*jeSoU^JOB4Uwh(b7-~y^<8!&55@RkF<=PT}%*U^X=)^Fr=nnlgIxD-M zi#KAIxJ>Ocv}G6`V}O5=c9aSNv3GX5x{O#{pVXdc{(`+dz`qWv z8leq8T38n6_}JG;{anJW7cJJNxz8gtuh6tafL2BlY~JlCe67q=6V>=N?DcRF-A!#F z5V05KmW|5y3*gs&d8K9aX$xssc38%G#1DsdUtNV?&x!~7TAxEnSW*s2j_t&G?1}q> z_;nbtwNgg&L(8-i*)EyP>(jumBOFNd`Pa+VDRG^0pAg3ASrD^Z7|1SRU%i4~FqK^! zaW3g9iE*W)-+;ftydYY^FWRV>lyU#UKc$}tE$S=f zxojr~5`F$PO$Tp@FEZ`|R%SKkUs|(qP{cWq_)OTrca{HgXcwSX2{ll(R#Amtc#;Rc z1GZ33DGc)}09hD?QW(3(zqk?u(aT)qDsep2`AJMK1M4GPo8jZv9traFfO0RLJAv})N6{mRf`G#{d(H>0xTl82y<)f}U36SGRWTYbivHP^7A@Kcl|@|8PYWe&q<< zN=AC?7o`t0wcQF_o}6bo%U{35de3zeXH*iuRkD*iRZZL0Ve++9Lc%?i72&$L2V zJn`|1s|{V+fZaj-`lSSmOeaU+ zZ=A7Lg5EBSWPIK4GPS#^|;+pzS$p_k6-`D@99tG^gHOR=p3J4(3j!2 zluuIh@Tn*EOAd9y?{Dw7Z&+pXLL9i-B4Wwh#G~36zmI zp5Nl}uh4@uv(r{W?yBBdA!{IVI@?W8D+7Q4m#6a?$qP;N0HQSwQ5WH%&m<8Za)mT{B za2fs#9kSJ0Okt0$gjsI9Qo1C|!>^iF>yTk_eeV=+wskPwOh%j-nx|i3ETz@ow5V|$ zAGP)a0{96?O$EPd(ljGe6g6N0IIR=QDnnfzKOBeMcsw0>a3O+(T6cQG4xP_-p-3Z$ zU)t08(f%l>qTYaoPQEa-NZ~Tt`1n;a;nOCd7bxV=mL;;oaZ7`7sN!G0GzLYyFTwO5 zfy7?J#JGIUsPuyKU)w^^ulw;`htkWiX?t5O#_k|~y+(ko^!EE(VD#h)E^w+@q%w2? z{Q54s`dAu0{2(s2W1=c{#dy7(2pPP zB-9p;8+@ee0JR9?W0x$kziX;O4j;dE(tdjXgyf?uj~i&*k3vKjbA9}JDqINfIR#T0 z#n^WXj4NV&+re(1e|=BR(6vQW2}0i`!fR&a^S-`&`LCD5WwDwq35LVzJQVQ?*Vg&? zHEYc}XvO^NI(z+29Y9vizrwfCK^s-dh0BsKl^EAIw0YVb{uN4C2W6T~H{U_A%!Xm? z@Hv{NUj`L`!fISNFeMVHMm}?-e3AhFnn8b(W#(UW*oGga3eI^geEj12`5)LZ=3l>} z_la0J;?$YriHBb`sIIYAXvj{Uhu^~di-}lng=GN0gwhL}>ksYt$C2%Vpu&c?L$I*f zn15M}DXRWZpkm77jN3SQSCAGZz`q7n8>fCgz7AvO5_G6%Aya~p$@6TKo!SFh%sZ;{ zV6uRk>Zyn&$XCx8ZS(iX@>{?I;Y0dg9_&Iix~xX{T)7Iluf8 zOnF-#PbR`9&yREdtIGy{P10M9h##5|5R+LKMJ!I^CL|gjC3PH|$E6Z{AeaW9+Q7Jq zFsS(9{Fk#cL+<>ri-kfCUUxUQuIdjh<(<9={emE%`1`4upzqH)>!s=s^KHzw{+Qgf z7lNM|6+d+K%Q^prD6twlVeEzmkC7}(@h^+}GrfS%)Zhq1Uf)Dt*18zBxF)%ipZNTX zAwXIF5;i0N`Y4F=EarYL|59uVHq-1Bwcljp>DWvkzcym#+eI`NpQ62)xJW#xO?g4W z3Vx|JP%GGQ*1=-t*YpE0GPdEKekru#YK?Ksk19bwNe_!Q2C}glH7<4k#t8TqFgH8{ z>$@HTtRFfb;9uOso=x+Wokv$29D~155o7L3(5@jrulE9}HY)$+t?7)hn&!*3Wx=Z);9nu- ztIPR}Uyo(u(iq8b{f5iGuzSd@KU9_t_=OPnJt-`c8|XMeN_SNL3){GU0NeQCa7)SH z^B@N-;KhKaU+Vm_6E=K_el1s(PaonvMb6Ey!s8dz8Bw){-m0V+rFs%D{mwlPhO`qf0s!Q zBGlPtUye5B!&>tgHx||TuTAQFW%4r}5vPZsXJ+s^P#16mT62`p-}^&~2kl$?1OD^Vp$#^1iVlf*F0x;H*?gRxib92daoA8X4z!_VGBR4rF*K)*ldt6b zmmjM78d)-us>R~M&I1d^_?ysY_x!RN7xp3dc^Xz7{ehjYb=KWEzigwcv&LyQgEsr~ z8fGJaUoR2zp3(JB0KdSOH_rb_%O8iI&aIe=eojw$^&3Ddibsth#;?KlKGe@Av#8UX z0E;X*^UUYJ4$%lTX|VI?{F=);wWu{{0fjBC)6p-+uS3?daFY{<#DS?*8sbh;+D5*% z;O-yb*IRORV>E~L!e$fmzZLm&?J3#$90F5R!7tqCB08pYwI~!Tw*Y*@9aA91KL2`% zj+b_LpjVD+0`LDln-UIxyaBY;mf#ZkBe=)U>(o^Cv z;r#N)HMOR=KT1=34EZl{!Mxs{kA>^~8}r)n`(BRZYSY|E;g{^JM^$+e^V3ztaFV7w zu4R?_jRSCdfVu1+whb#HhWLgJq0^aX=lpVW9;Z>3a-SJ|zXjXV{ED$DZaFr}!LRhI zMi19s!hJGQ_5WyZvv<#6O@rr`sWTVdz1iHX+=%0|$_|+I+SP3#axx z*Kcg4WgJ7}HaMG{y9aHY^Ix^jT5$dRpx|T6+BnlL{5t2q1TyJ6y!t4{uQ6I};hde* z=P2o%YiU!VqE%VUI0WxIBmLYx!APdyb3$7u+)f0+?C?Jax zVrV6tU%tuFuY72MbN*|yv!88X!4eDmna?k8a@KUjXcR!J>DY%ND*u(oMN+G^ak(Oo zh~l4VtUAE2T{I(rR<3Q4F&XjCFJ~P6q8b%Hd=v5BZrH=?OARynB?SJJ#`!PPS+9`= zIXWQJX-cJEHt-bnB-AF55nJZWGf@uy88oh6^|>QcXKMpAY;^GXudt(E)*?HscuHMH z=~o5?a%+0Clr*t|P0pSlS)9l9LHmlZeoEiV4F@A1rKe<9DVdM7JKrU#MCW^5{5l(g zuvdS`g7F-K5BV~scqN0}eR`?H1KQwaLTkD`rxe%aw)ycR78Bx~r~{!rJQd z%Z$Q2uIojt{OK3NI1^FClK_5U1@RvJ7j(7}u(f~fsVpN1@ZI$AOD%!pZ(J)euD!sI z`(*pSCmsvpm*-1hu~9;^3NG=t_e61Lj<(9tuQc#0Kw)-mG`=+UOzU?Cah7T`f~bPm z!sB1y_>5njS&j8!1QLPWzOQLR> z8ZrQda_`0YFBPGhqNAkB30{?TgwRT$etsjv7Bi`F+8RRQ@*6Cqv5|6~emV7rstu>T zzRetDioQqjG2`pi=f9F7VxoKziIx6HKicdf#0nM#@yp|k8Yg;UHVzvi^Jql__45t{ zpj7g0dP8)l@5{CP+W6Pr9E~LWx+bGZp-D=BJmh)xv(hRqLwzD*byeH12L^-Sdl` zK1b9!abjTI)~caD0#<#*@edQBJqp@f{?#oya{4$EmW`;szKPWS3GlC%as9(eijKpd zpA5B_IJsHx=$CW`uX)RaSFCjYrXNa_SLW(`U9MRD4>mF z$3hNF0JdHNOx!m9;j~sHNmp9No5;clY-i{GD8S9O%?r=d&jvqu>WW+SWAtNrO+NaS z%KaO_Wj5~xxEZ(}usC1p(-`St6w-V38;XBP=3i(tE3Yf5z!X!5h*&fz!^H#E zov@;YgDD3U|5}PZH=l#Sziu3kBKNuTFEI-DyMp}70<|BHJq-T!WqM4aP07KpD*nY~ zhuF_4T2Cvi^{0d9mtAg!qs{{uYpJ~ ze#rRsrq1_otgx_Ne6I)&2o$j)2Y8;{`!`CF-ypZVErTH8LC|DG>@5@`mYjL6;8zA$ zONHYaAZY@7%py!eRsIWHCUsM@2FSKBRtR|{^j7;{L5IdkV|?&sQWiI1@UX2 z*=5I4?~l@3Nc|*J`UI2+xMNkFUk?8b)@x|i0)9ya$GE?D9GSkk`1Oe1YJq=YTsrPQ zl%1vMh+f6NpkJMtMRXwCHfRiBBmE2SL*`9sUef@6EtTM3dGr~^K{l6g|3=EuFNc4@ zwiLA3@V-#{zIW=ILO#J?|vKBm&xg{1Ep?aaRSjDGZ^#*Wfk;_~oxfCI1z2@x3{X zRHm8a`BC?41?o3E+Esrw9Ug3Zpn(I4%)fwW!TNcHU$rrUqGb~)SRb~Tuzr61hKpaF zjo8nk&8}lmz+SZ@f&3Ti;Ps_vzr6M`izzV9e@()mEuT|=c!X`sey|d@2_3L4p0yeC z_?HSp;n>#@^RFJ*!?ou_&_VX_?K$}MhGrrph-1s>Pv|v^5iR5AzkG~ag00m-+(w;W zMxSj*zqo$hwJpSpTY$}+B$fYKm6>qts&{@FsUL@bu|0&*gC*Htso(HNf%qY{4+FMN zU0i?Y`Nn7Ig55I|Wt+*~G6cVV;|^Fh*yjSwJNVbju+My-IW|(^UE+tFUv4j{HvC%& zv~hfiK>X0=y(-nXc%%?q{qoK)!^B~0h1ov4YXQN&2)|ILN7qX<_7QC^ex1=*(s}zs zt?Q4kZPdnd`>bR+Qq8|g+X||@L4`V#`E8bS=6WuEX~Q&XC9-{hFv?iz69^K<9sP3h zUuu5-2@41Ra0l{wr~st;gC749h#xw*6ZwvO$66(#VJQBG6)ppJs`0C={}qQrF|LI( zCh|mM8wvsZa^5qlzaMtBb27U7@`vP8)@mDzYdZcR>JOdu8pZxP5>l{5VPI||lB%DJ zU;FD(9~HJz#$s)-H{Xw9p_IqJD)@z1++ha-mYUy{S5Dzli@E%Z!-jw@nM~b`<8<_> z9b5kCci~^0{}Qn^q0{1D&Fez3H-?Iie);*YRVtp)xd!$}#iIx(n&;vd=Z_2fx025q_n#It%`xX~@PyBOTRFe%TJ>+jkJ>A{(y=B$RKRoQl@VP=ByLxoKWzedyZoAl2TE}TpwPMdJ-a~1z$AZq}AX$b1_y&@I-!n6R* zw*m_$)Bzm$^YD93@Y8z7KKuNuq@7W)1^$H-E5I)!e^b44FO75m27IK0+Juz>#~%rQ zKNOdJdAiy^zwG6|VEJDn-o^>u*oWG zumI!Os{k^L%jDeOe4l^u`7gj0qg6Mdjxmiu;!48(QOW4+6LazFw9>C#86%x(O5bfX zA47#nHGYl5Biccah~{_bNi}6eQQyy1u1F#@_)>^%@ZaH?Z@-zATvWo2#_0y?m!aaqy(g#-2 zGaSJySI#dh{5l$W6x;Y-LQaA2b^NN<(!_}sVe%YG&t~q_ewjik4*N*Th6@0hH3z>e zTzkmpzu-0l3n#uL(qVQ8SRjdO?uSl1f}w@vn{(P^)v|aDRNF@1QoD2Z1UD>*tj(F^T%a$<{(X zJys9F9(4SuD*go&&I8sD%UA6BT@Zj@jQDf-S5mndGBpKX{gif`@9*Wh3lF~#Ed+}! z1G3+O&`^Ycih6!BCw>^s;MY$WH~^^LgZWYKv3Lp{{KC z-JK*G!%@N$;9tS>%a1yH?2Vz>br%+ab|HS~c}>;$^?dZ8o*YBCcp~=CdeV05Gb`~! z6Zh>rXZ(e>MBE*2Mw&abq}Q!|^5Tc$Td0|An}&&7Dy6)wboo0F+$>&I{1CTAAx+to z*|ED6fk4|#73~R}U*`DX{O{`t?HL-)Z^&;;&%g6W>6;;rG`A7wR2us>BO4uP`SQLxAW|H3iY z?tzb*Ew6>o+1+U@BE?P=-BlANTnUTFq_d;1^)srU?tzZVbazszB>S{40^yHqkvB zug$6Wp?eYi9R6i2hc7WC<1Z>-9k!13tBQXm$D7jHr^HbBN*igfNx>KS0@0=&{qpKJ zqF>U_Ysa!H^3lyhFZDis5&wd3T->l<|MUD=(JeMe{TC7=Wt&jVzsk{{=;s->rndhC z_K@#CoXfvpH&7PUKU{b1B=BpN?xGKJf2#4zRK(l=~$p zOqeHuT6yeM{0p~j6krN|YIfS|_d?)&H~Q>;mmfde12g!)!?kaKnoTND)+N(h1a4ZNoWrkNCQ!w@^g!X3)COW;=^|Ao+WI{G2-3xuJtObbs5>@m3k zaZw+?*s6?F3UST8;i7UW;>c7$^I_DTp}2R1R|z!RT; zg^?P=nRFFDw3Kif@k7<7Qon&~598~M1@&QZ$ONzC+{D9RWJVzWbsO0tWk!efW}2}( zE$A1DCqvyK_G@W;cyEs5#E;Qo1;%_E$C590INzrUMQDm+UqEco?@C-b;T{wCZuzliR#plEyt z#a)B~%Rv3%Fg$$F$uD5Jze?7vi6Z>x`?yW6a{i0asxzIywHr~~-z(rph2Qs+`=UqmX{EE1mowmHZc<_EHuASJKgAFTfNqxmHhH z{1P?%rvy-~!S?WP09&BR_#+pxCm)>|GM)9}`VAEl{1}#iOA67SlU!i}jjLbg=$A=5 z_>TG;jiR+O&SLTtZ`fw`@=NOcJd^+^&6c3f`3>_ zjBHzmi+A>wlevXI0};bLOXW)b3l+Zt_hRkQ)zvpo#N-pmk%ggOK7QrEzto>iDRJ2b z6>RX7mGZpNBk&%#hCzlm)4if&FfyfGO50(d`|!s^pkG)o=2kBMYNaf~@)5${MgfJf z6OH%?)w8lM1wruMFv8$zpj{DCcN(Q7tFgID+0(+@LE<5Wb&2x5E zcD#tg&=f6aFqz~r5xWb>epRu=(@hhYH3?Z2R+Ge2*hgA>B-TaY*=D>mq z|I#MXd<&L-iq2&^zj$8(K;}dgEBtFa;i$EZt~&e+%jENv0RK8JR@<=ir^cYLACDDO z09pB3#jwTmGf~q;TTAex%CO=1qiw~=o0a|q_?IlHaXlLv++~rDiUM8>8-MJw!oM_J z8&%2zzl^*14_SIe>D#LK7wXw;#;0LSAU9OgYokK6An54nu2 zT*-g^0^S#H>pdJvO2ngXjg3ZL}uWf0ZZoswkxZ@Z1 zN97_L6@D@Qa`dYy)JlBfX(#wsc&oYlBtB~O+W7pdhH%$Ff0L<=hrTBEa3X9STN0tT z3~vqaFWk0)+R*J;K&_$`Sr}^8FZ9{Ff8)~EG|c<}vRyx;U)zr%5vDL#_1WWJj9&~B zIm8d2&aM#9L4RBU{)KF^f-PgjRKmPeIz?N*su`f*1OY#H!_ba`O7+f5|^UU$XA@dHl8&A_eXqHqQ-^~hD_?O%Q zje|dSoc4*UW#o&M{p|CvZu(*N`YCno;cIfag=^=R8tz3LuWS5Oh#&qVRJMImS@oZy z^H{i3o^A2@*9D8OJxtE%od*6OW^0rWg1Pq4j~_k?KSABZdnr9G;3zsphMfNj@~^v` zKKDcQT8d2^^K^AEz`yX6S%r|dqEfIYJp(Te0%8guSq&9 zU;$Ek-Z*PKW}$4}A6FoL$oPd{PtlWkT)0%wyS&&=fPZC$^5DT%c;X_#`>rPioWLfkrI5T>@cP^rj)(XnIWy}Cpt8;r>9x73rgyMEe@kLultNKeRyyeHnc zdc&!~sI}HGVflSQswdtYN}?2TQ8-FDd;w`5^~56egEdXb_0~coJmv{c)F6bxPi(i% zlf5WM$D-f()b$-2>4kf{jQ4AxmU z_AT(+q-$;s{Q>>HTwD=CO`%?XBE0pg4Xu&==|xR77YkGw7fAu$g}usx+O%Q$Vax0b zdu^V)QU91cnf_o?gCi_&iXPKHHmII>-}U5;HFpkvD*ef(#mAKJ2ThCbp65QX-L<&k zM*U9tV*1*qhGR-t*;I2Zbm!pn>Hpqzg{@p#q8qB-)0h4PUKqYpM$^C7wAfzY=oe|8 zHf307MxQfSls;Yy8FF7#8@f&2n!co|=I#ZaP;;B?OQT~_tth@r)C@r5K1qvhC47Pw zv9Mk}alh+^UP{X*tCqK?BVgguSU5b93!E3-&>Oa}f~X_OC_(VTSy(|lskEsPgZLrdug_HnATfq9I zo=E5z|J=~4k(8E&1O^LvE5X8`dg6T-#-0w{s`M+A)>wdkIZqaQeST8to;E4r5-3_| zAT*&g4&USagj1m?ttHd02x-`3e&RJz`X!)W!qcxJwPGYn0Z5QOxCreQp(yyu4g1-FEMKeSl*!kT{5dE$MS(cEkFJ7+gsp$|`P;U``b zst;*Wps(*q`+8<0ctXD!RRR6)N^6Og@3tl`og)31;5SjA|!trS^2~-3j6M0VeILk z;Q#uHuJz9@d~1C24JE7y3VxgGzVgw3d*Hy-FV3)V|Fu(JJ#*dWzGDmbPM!La-zKCD zhzHI0hwF~c5th{1UZZdYmwkYC1;35P=7LRJW{%Jlmfm}aemkCeZH(|2LQCZDSqmmE z5^S%{@AjU#xa6$AD*BshD9M2U*2ujI6 zhV82jdHPck{5IiqsEKZ*1@dCSX=8?jmZqI_71ha$gpB$s60n&SIQDVb5nMYj(A0L^`%t06Bd)o-0V_J^i6~!)5P1-gk*`e`pci zKnpGwdY$j;qgq-c&2+dabg|&PhWbJd9Q(K&6x=ofcv^+aK0redE~bQT4Bt7p1n9W{ zFgi!D-9CqI)b5lIrr+OGcgz(o^#o79`UAMUxC-cj_+#!I&cWp>MU(D#VeGfbrgUvn z=x$e7;0f?xou3=h;mx6?^m}qa$rVDLu)y0JSg$#_>;ts-9;|6KF89Le@}9Wg#rqHe zXbS;o%@snPuzC|s8O4UR|YcCRn(`EK>gShMiGz(4>-iKAV>;p6l-gkur$n|g2 zFZa9tBmI(Y8_eOV(0p1e&C*4JJBR%Q%~wHZME&Lpw)-Bcq2(gluP>q}FA~PQ?^+v9 zA8ktA7+o-Qks#eU3<&}pSIkMZfl)6Kp+1IVMq!1^Rf6=sORQtx;D*qGcM-hx3ix8a zQ|1WXTF_iv_5r$r%i@NQ=${ZLiyyqE;bK8}A2@C5hqYZaB9`F~Wz7}*Hr3+-1FKki=QZ51i>JkV;=RYDd8yE(nwE=% zF~`%K^PWl6)R?p-)jY{F@4knsMm0z%tRxLlLZ!TJfAEj2D6?8Pw};-y(W2tO@Nc0Q z5dTHEXp;XQg)Q~Z@9>|luK%D>EcPFK_@DJr&xH#YY<~I0g8!8lf8;;;|81K&y6h`8 z1i#P!r*!#ud5^Dg7YlBG{sRqEA91t)L|tBT!c%Hb2a#?2tzMho=08Q3tBvQo>T*D3 z1GWxRH0J~Svj4=L=xSYdAA0}1r_1kV3jV*