From 581ed428d1eda3f6f27c495b0dca60bbe4ec70d9 Mon Sep 17 00:00:00 2001 From: DmytroStarosta <151664402+DmytroStarosta@users.noreply.github.com> Date: Mon, 7 Apr 2025 23:23:58 +0300 Subject: [PATCH 1/2] Add lab1 --- lab1/.vscode/c_cpp_properties.json | 18 +++++ lab1/.vscode/launch.json | 24 ++++++ lab1/.vscode/settings.json | 59 ++++++++++++++ lab1/delete.html | 101 +++++++++++++++++++++++ lab1/lab_1.ino | 55 +++++++++++++ lab1/led_lightning.h | 21 +++++ lab1/pins.h | 8 ++ lab1/schema.png | Bin 0 -> 70810 bytes lab1/web_server.h | 125 +++++++++++++++++++++++++++++ 9 files changed, 411 insertions(+) create mode 100644 lab1/.vscode/c_cpp_properties.json create mode 100644 lab1/.vscode/launch.json create mode 100644 lab1/.vscode/settings.json create mode 100644 lab1/delete.html create mode 100644 lab1/lab_1.ino create mode 100644 lab1/led_lightning.h create mode 100644 lab1/pins.h create mode 100644 lab1/schema.png create mode 100644 lab1/web_server.h diff --git a/lab1/.vscode/c_cpp_properties.json b/lab1/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..cea4d3f --- /dev/null +++ b/lab1/.vscode/c_cpp_properties.json @@ -0,0 +1,18 @@ +{ + "configurations": [ + { + "name": "windows-gcc-x64", + "includePath": [ + "${workspaceFolder}/**" + ], + "compilerPath": "gcc", + "cStandard": "${default}", + "cppStandard": "${default}", + "intelliSenseMode": "windows-gcc-x64", + "compilerArgs": [ + "" + ] + } + ], + "version": 4 +} \ No newline at end of file diff --git a/lab1/.vscode/launch.json b/lab1/.vscode/launch.json new file mode 100644 index 0000000..f7206e6 --- /dev/null +++ b/lab1/.vscode/launch.json @@ -0,0 +1,24 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "C/C++ Runner: Debug Session", + "type": "cppdbg", + "request": "launch", + "args": [], + "stopAtEntry": false, + "externalConsole": true, + "cwd": "c:/Users/lviv0/Development/Arduino/Project/lab_1", + "program": "c:/Users/lviv0/Development/Arduino/Project/lab_1/build/Debug/outDebug", + "MIMode": "gdb", + "miDebuggerPath": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ] + } + ] +} \ No newline at end of file diff --git a/lab1/.vscode/settings.json b/lab1/.vscode/settings.json new file mode 100644 index 0000000..c9e66f1 --- /dev/null +++ b/lab1/.vscode/settings.json @@ -0,0 +1,59 @@ +{ + "C_Cpp_Runner.cCompilerPath": "gcc", + "C_Cpp_Runner.cppCompilerPath": "g++", + "C_Cpp_Runner.debuggerPath": "gdb", + "C_Cpp_Runner.cStandard": "", + "C_Cpp_Runner.cppStandard": "", + "C_Cpp_Runner.msvcBatchPath": "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Auxiliary/Build/vcvarsall.bat", + "C_Cpp_Runner.useMsvc": false, + "C_Cpp_Runner.warnings": [ + "-Wall", + "-Wextra", + "-Wpedantic", + "-Wshadow", + "-Wformat=2", + "-Wcast-align", + "-Wconversion", + "-Wsign-conversion", + "-Wnull-dereference" + ], + "C_Cpp_Runner.msvcWarnings": [ + "/W4", + "/permissive-", + "/w14242", + "/w14287", + "/w14296", + "/w14311", + "/w14826", + "/w44062", + "/w44242", + "/w14905", + "/w14906", + "/w14263", + "/w44265", + "/w14928" + ], + "C_Cpp_Runner.enableWarnings": true, + "C_Cpp_Runner.warningsAsError": false, + "C_Cpp_Runner.compilerArgs": [], + "C_Cpp_Runner.linkerArgs": [], + "C_Cpp_Runner.includePaths": [], + "C_Cpp_Runner.includeSearch": [ + "*", + "**/*" + ], + "C_Cpp_Runner.excludeSearch": [ + "**/build", + "**/build/**", + "**/.*", + "**/.*/**", + "**/.vscode", + "**/.vscode/**" + ], + "C_Cpp_Runner.useAddressSanitizer": false, + "C_Cpp_Runner.useUndefinedSanitizer": false, + "C_Cpp_Runner.useLeakSanitizer": false, + "C_Cpp_Runner.showCompilationTime": false, + "C_Cpp_Runner.useLinkTimeOptimization": false, + "C_Cpp_Runner.msvcSecureNoWarnings": false +} \ No newline at end of file diff --git a/lab1/delete.html b/lab1/delete.html new file mode 100644 index 0000000..ee31af5 --- /dev/null +++ b/lab1/delete.html @@ -0,0 +1,101 @@ + + + + + + ESP32 LED Control + + + + +

ESP32 LED Control

+ + + +
+
+
+
+
+ + \ No newline at end of file diff --git a/lab1/lab_1.ino b/lab1/lab_1.ino new file mode 100644 index 0000000..49e7e62 --- /dev/null +++ b/lab1/lab_1.ino @@ -0,0 +1,55 @@ +#include +#include "pins.h" +#include "web_server.h" +#include "led_lightning.h" + +uint32_t interval = 100; + +bool lastButtonState = HIGH; +uint32_t lastDebounceTime = 0; +uint32_t debounceDelay = 50; +bool startAlgorithm = false; + +void increaseInterval() +{ + interval += 100; + Serial.println("Interval increased: " + String(interval) + " ms"); +} + +void initPins() +{ + pinMode(buttonPin, INPUT); + for (int i = 0; i < ledCount; i++) + { + pinMode(leds[i], OUTPUT); + digitalWrite(leds[i], LOW); + } +} + +void IRAM_ATTR handleButtonPress() +{ + uint32_t currentMillis = millis(); + if ((currentMillis - lastDebounceTime) > debounceDelay) + { + increaseInterval(); + lastDebounceTime = currentMillis; + } +} + +void setup() +{ + Serial.begin(115200); + initPins(); + initWebServer(); + attachInterrupt(digitalPinToInterrupt(buttonPin), handleButtonPress, FALLING); +} + +void loop() +{ + server.handleClient(); + if (startAlgorithm) + { + ledLighting(interval); + } +} + diff --git a/lab1/led_lightning.h b/lab1/led_lightning.h new file mode 100644 index 0000000..3f66100 --- /dev/null +++ b/lab1/led_lightning.h @@ -0,0 +1,21 @@ +#ifndef LED_LIGHTNING_H +#define LED_LIGHTNING_H +#include "pins.h" + +uint32_t previousMillis = 0; +uint8_t currentLed = 0; + +void ledLighting(uint32_t ledInterval) +{ + uint32_t currentMillis = millis(); + + if ((currentMillis - previousMillis) >= ledInterval) + { + previousMillis = currentMillis; + digitalWrite(leds[currentLed], LOW); + currentLed = (currentLed + 1) % ledCount; + digitalWrite(leds[currentLed], HIGH); + } +} + +#endif // LED_LIGHTNING_H \ No newline at end of file diff --git a/lab1/pins.h b/lab1/pins.h new file mode 100644 index 0000000..9f9caf5 --- /dev/null +++ b/lab1/pins.h @@ -0,0 +1,8 @@ +#ifndef PINS_H +#define PINS_H + +const uint8_t buttonPin = 13; +const uint8_t leds[] = {2, 4, 5}; +const int ledCount = sizeof(leds) / sizeof(leds[0]); + +#endif // PINS_H diff --git a/lab1/schema.png b/lab1/schema.png new file mode 100644 index 0000000000000000000000000000000000000000..7b6f950e193ab4bbd7539605827f008eea112be4 GIT binary patch literal 70810 zcmeFZbySpZ{4F|C(p}OG(jX-%ErNu!bmt)5-65ceq5=W~l2X#$pduwbGf|P=e2Hvqx zj{Oe4-En)SC<7_!r&zWVy`?f1-7~a3D^|2-Y zU2Mbme=q*Oqw#;&#{bCKiFr>)~?F>`(!T4`!~8=4JB*}=NrFe z+~-m)tw*8)(U4RtJdXv|MZZVG;~!nC(i--M+#|{g?0k zelbZXF-99CuCkJTx1fhB8qoDAW)4dxtDKlvvxG+cAbL3hF7&eGXtf1t?ydk4%Sin~^ob z*ETD%8Kq)py^%xuQb$?w32+Gi%|LQvUPeM-ajGcE`PqT?79`W83?dWh;Ev+86?!w{ zg$UZ<@;33saMjhVypNACGN^b8YjpQpF!SO~L2$GGz8Hv^_dxH1HERgP+I=JpLP)*cg9>AP<#x z{d%TN2?_Vy8Pma`ywCqDJlgiv-{I9zkV|ox-?;SGPTh2Vgb|_T(V;XxoL$WDzdS6O zn8^Q8X(BXq!LukKDz&6W_qOE(|I>1Ma;nqkS|(4htvBG=^k@EXb_UqX|1*_%H#jko zZ_5$$XMI)XXcw7EdgDV(n^zg4t*nNsTd%L2o6qf4c7Cq8i>|thp88839v{o#qiAVq z<)4S|A0RF|Xtg|&^<-ZldtP{DV;SvYNS-1TAEUQ%rkW9|l-(ElIWo|Rfy&y-cCRXr zXo>1yBVSv#DT+`jtc(?}`XW&K?yZ3bsJ!RB17l;L!p;8t88sG`SzrHrG_g(5zPSvK zvR=qEstoy#W%KM0mwgwJ(p_<43M{Z=ABJiE+Z<h-OMZL#*yo!LRt;(f4fDI z%Q?BBE*cgc8;kik2}NFGaCSDq^k)fQvhibFGw8+hM*5aJwEWXY3J~rzZ+g-c&ThE_ zIdptFEPhD>$+nIyybfxLNoY(=0_xu`3luUqc&{G$LLMn9-n|TLsiyoqk6XW|*JEKz z_z~uTHk7&k=J8|PHWJsYcEb?OC#r2^94*n9nsdJFTQXuaYrZI3vz`DCEGYi%BkiT7 zC0_D#?q6b}qVq?-RYq(PrXtZ*5)MQ3o^l)3O9SmbZ&%t1D+qC`fl|XPn&K-CGy;Y#Y=mZZ@x3MZ=p1 zWeJ(mbbKkmeM418%v{#YS35%l#R=CAy%uH?yvmDhC5?@UVi{NT zoru{u8rqbgH1@-2-Y4BJ$1WhjvY%up2CMJfi0<<=4(=nt{h>qETt7%_!_xL;ENK6Y zr+~Z$K4t_z+;_~Bx7Ahv2_loFuHfM7-DLdj>z87haiL?!aAoH^5Jz7FccTP7zjVJn zoeP8A-Vb+`OI~4JJNw^2ki3gdxS)bV?>qj|bu@VmV$im5nJn9MCM8~qc$Y3q{x(Z~ z`HP4SM6Kj&Lj7H0h`(e8`=xq)y|d|Jx9x>@C1WGw`H{+$3IGWzciK+ei$@uVGUeIN z#S9c~{{zEdFQQn;;N_r8ns;Cys`)5so1-G#0q?TKB7x5 zH8rNQq+I}?p%<21JCoBErfP(d^=(_9;m z!=CrZD5!AM&vogaR+jV_uNXr|%O;l)`FIpl{{vg?2wo(Bz`mWJ5nz5HkJ`j`Y*Tw8 z`qk%b@gQsh#D#FkeDFnZwf%&9Hh@}z+t$0Xa15@BF>PzxKzQgLujgUPbBOcI!ZM?RUit>@DpO<=};JK4pw_g zLrivq5fRa%5O|$vDsYX0*qtLl-yE4mwcF)EyN%QYRyj>gMh1fHDAK_*PKh+iXkmo` z;#g>*t83fR1_o1^%DTF`?l}o6>@@N=dk`WU-hO4Ido9Q>rCWMB1 zsT*FhuDaJS;!k94$z1(U`z`f#Q1P?7mR#i(S)yU+pDVSdtPJ;k8+X0MU%fr8(*5=N z4+_6x!T?xaT>MlpJz7DRZ3I`Nk+Q1`ufy~)EiYy$PLdW{CQmK@2e`VSKVGmO0j}GH z8P~rkQC?EQ-D-ZPa+todr$bJIc=R!mQWBk(PT~1WT}4W*Xc#$}FI8`GY)^w}8G+7* z(YM~IJm?eYknipU`}-x4ZO%w2ZRn7)=TZ@qmtx^E#c-l-!GHJW>wS3-zj+rmTBoSm zPL4{_U!;CHTs1F@4xLS8O8_eTL!IexaLxVE&EaRcxUpZW=qQp3W(fOLcjUOY3NkOX zh`Uhb_oVTE4sIkW8qbanZmb|dup_xA9KGnt9Y;P1IsHSZm*m)JD59ctQ60{aGV26) zI~s?duo1V1Am4>C5-=%+vc)>^^Lp*(?vgoLe=Qvw=?XgYWOZtjxUoW@b! zPY_w!Hjdg6&Y4wJ9`kbv3PvK+$f;Wc_+20l;H&Varaa0M!woeJ{q8P_lJ!DMl|Obt z1}q@SxgrQd3&$`F5v95Ueu)Qu{XLoNrBosCF!=Y)Q_H3Z0uekRt zP|{LAl9ScM@c|VsBR+b5ENAbaJ}3T4pKRVx^rufWnL**9s(EovCR2Xfb?=)kW0q;| z6Z!b~3<*k1I|=92P+5fT61$5k-n_aiFu|%J|Wjst4zb`@)v*jJ{KyJe>h>gyoX|JsAMHxly?I7QbeIm3HO3fZN zxC{(}4_fU1{ytQO0XZC8WVMpgILgW-QEU#)?hBgtg%sjRvWSIyw#*0k;f5yd7= zM&oGwjN%l#lh3nfHHngUp!zuJskYRo--f$GBO~D^*ZV2nCo^8R36Y$fg-l?eq|O(; zkQV_P25=Ubg;Q_5@Iq%CcPtG@EYiUBm95XQ{`)+Y5a_i(dGC)*9!?akl(f=b@7@IgkFVyYyhq)l z{L$bV%)yTjK5uP|K8ktbnH!sjwGiM z{>n6Dy;)TfT3@$r#h!yYHs@*vsw~BdObyW;w z1DNzA{9Pt`-+$uz36CpH8j`yKpww~UpwQ`JP}G5 zPGNo4{zWeV_H0%$jj*eAe4UrloaE4{rIGJm4z7DWRw6{u#UqG{=s`rR3wI5wt}=Ck|(ZqI2{Pn?(Lim57bq@|^;ZI^nR zW_%5u+Uh>uni?7$48GWIz;miG7;X04dd_LwsHd%%%yoP?r?p38236YL*Jmp(E9qVfU?G{V-saT$edgt+ zdkbB)h)BvZu-blpk}wzz+$gSrH8dF9_T|aI!@H%rTBhTlQ(zv~{@z@q(3IpxQY>HV zpTSp!MZ7LEqG?(t1A~lr^xqA0KM^HF3VGx{((}5Jal*~}bS#}b(OuN<&_Rh}q6-y5 z+$CY2brWAUAK&&@w_>fk|W`X)G zPT171W{P1y?>a-bJJWzJlXYK4Cw}8G?Ih7PY#Y24ue%$?b{aK3F4yuh3KL?!ekiFW zuK@A~r(QV{>#WON)$lw23oBbJxwbE#c(4`>_n7FZ6$+e!`Q3EYb-w7A{(<*RNP7isHy z7oVb{yHm8pzP_xS*ou;n*^CgwG2RTvIuaF$<^Ofl%@}Yq>G1O|twFV;26cw}FQva9 z&o3;*9334UvWV&k>F!q0re&azlF52ijfoa^M(4# zjG-ZlgEmD2gVgofuV0^esDN1!(6JjAU)`i?F(4p}_i9ElxSRNHVvu>#Ng|n=VG5r% zF2cED@;%;vV!o~8#@gDD&g;nGwGo~8j}wFP#6B1gpIrvh`uh1L7Rt5X2mF3)EHWVh zcWWlm!GDzSmhBDYmrpvv**9kzPTm_&B%+p+)npgf)CiwfY48`qZC8oqL#DPOXSM+s zq;Hyp(*jj>=qV+HNS9q$Vq%`dw<1F%0c+Q__W@e_)_n8>!@XV&C-=X<)VtHaE zM3RCIiNoZVb% z*z>Phqnncz8pg&Y#R>ptFLqk+8fHqM3=qw@+=Y=OO*4{Wc&-^4Hk!-tZ?9L&0e^$s zF-bd?*On3$Qeh$b@#9A@xF>+5NSgcq5)KV!bR<==t;%qOBH&@*mWhw(GNBaXFBKR+ z`lSwy42QoGMkyV~dO3*3p_)h3*Vi`$b@ULWMv-pq9F$8FIg*2VQCNWm(ACxT%IZUw zV&uQ1EdLD?hE19an)Se^Vrc02Mpy3B)XLGtk4#Env?ttciG-+UQEJ9#YRW!Olc`$D zXb^|X&}+vunZC2S$Hm39y1E)&(s7I5u?%whox;{ZjLWmDdO*iud4s{7g4NX2B;xuT zolKw)@;7G{WdV&!d+1hXI|QpmRRcl*SQxp5lsn+91R7f^zQR?wBN@PJb9e0 zL@W3VU8XbxPws>os>D}P;bF&NL#>SbO{fskZ&=QK zFb9Fe=t$Yzw*S(#p&+7~sdU$zC_p2odMLBX%lRs7M3tXrNE&%e1GP((1!!r4ZKmo5 zZ`HpFYr@sE8Iz6_liZSyXjSGcL4a4y8`en_8#nTz7IK;)FwFEqZE#WuES6-D)!@5FQot^1&kogxoH#l!r zRCGqG8m7tv$9+L;`oR1^!;w3(&sMhXGZotR%ymiv^t`tWZ3?9ohL^#8*qR@n;zM;WorNL{VZgvIck(hBHA}Mut zP#Cy4S=});Xto)gxzT{GlQ|zGb!9RU;Q8$DJi)RL zrE9gWkj@(hvWax*c*l|}qUmIL;pKzCED5faKUvnV(~G&Agrkjdi-pb@I12;N0m5k0^+I71eu(=_UxE@})4)3++);#(?(qypH6)?3OM^oBl%0;TX>p|PQ zcw*|XqI0_M{|faXg}q1o z^h&6V6#kh(Apuj2b-KEYCS|RqmOzXzmTs+yXR6$cx1-XjC)YMXkSA48lh+ z9|{~+QDGvX*0#Fe*_K)ioOU03iY=j_PKW=v4t>iR3oQ&C1!-u0W4_I=%E*=G@7{y) z<+GKd`&=B9<@jNciji4-wc+P%Yc`Vl#fPf${&#x#aPsi(n~xduZCJFOHT|cgn4GBa z5`mWt^qsa?;C>#`Pn1tu5#%OfEPn=%0_}B|NK^$-_pR&;`AKZT`&;89gco9XBtxdG zrz0uZom#ENdYyCKS^7uPW0>oiYg>Kplz1A)_Xeaay0r};ek_)BDhaaM?Ib8X-uxCf zL_GO}9D*XfRu-pyRuhzdU?H9 zCB$-5!^*%wfu=}_{*qW4e?j3Dw&Fv0hFcEJfO_xHwK#~qii|@-l`yvBow97`J#lG# zI;CgrcxskDrd;IGtJ+mdqJI>Dj(I(71Lj-Cz)X&9Uz7=`Ixl&o6*26O2K24BcUY)E zAvN0ka`Bs$Y>@RWm1Vpe9nH3}cT;G=qp{2Pe59@CG#06QTum9odznf`NtrBs5IeiO z*4zvGX)z=-UZ{8NoH*>5>z!R)*Y12MWb#d@3V8O`qC8fTKto8$y?pA|FIX{*K!DC-04@rgRyyP#hr6y{&b*!goRxtlcA##h4 zG&BfQSl(1qWccr6cy7Tz7v~ayZ09z#k201N7jvCgF)67hyK4KDSo{?h1aKcGg}+f1 zRWiVVOw_rtf}FVkd3>?%52y+jYnpRtH3eiB5k*V$234d7S%cV&pQLSZGV0yCp!OBFRwp2R zp<6bp*K_uwN5~Ws(xW47dWzvviQpUk)FPG#nm&3cq-E~qy$4P)bv1kc)WjhXEltg^ z2mK<9+o4k{2QEK)(Fx@x3JXg@y7=$)^*Ia2@JXy+Lp=wb1=#39>Q5q z8zqZ8q!lH+!$y`^4aHo+M^3@_8-M2bID=FWY?;RGpI{B+V-Lrl#cqsgIlGQb45hV8 z9WKnzZ?(%yM}zF%muw{TM#b}{Z6(T(%-VX=u|Sb2mCVL1Nv)adkCmm4cf1n>X=*aa z9M3>+x@HgW$ZK8vfKpn6FPVW8@(8S529&S}^oUq|OcG=fT+x|H-qg|%woiAJK1R*X zqPcsuAS)$-O+p`woN~!MuFDs2o?=eZd)oGww%NXf6HbSEgm~DZ3(hOuys_OEwrj}I z*4K|&U$>`vg*X4UmBSWWc)_J-(R*c34B(TT+X}ZV?`c4IM?lJgZvg#|-T}p@eeqy6 zqml2f5B=IFPU|1Q$3}vQ5LqA80Ua!S$XgOSlBd;FgxdE?=9?>l_$O6&kESr>yEJWW zVR#)&=O{@`pxQ8ca^(Ha0?|%eu-;AdZ^>IEw@j3ZIt^D9Bs>uG+BU3>n=Y)6hf-?y z2#DL;b4T`iAWd(FILi>@4B6dBIEzhhQ?G6X;3+1EM+974hd23clzF|NKHj+@`j|>9 zqul$vvPvTA(`{&p-kRzfr2+AxaSR?{F&f#-$ia=VB^2ik^tI=K5Jr9(!%v0 zy}jB!ANW)I*toc~N9D&NGZ85nQY56kDMOR`A*O>6Na2hTU?hL&<1I0R4X*+8s(r@cA91jf^xVUS77y;%^7T zF43r|r8CJyyUrb zRMnsYh57%s^-!RdbCe@LuK(f7A9HR{tV2vpOr_12syTqsAAW3u6by0@J# z1gP-exec~3v&^P^noapL(~Cs3tpOCe`l?yeI3^`{!xQhD0^19R#NqGVEAP<;Mw@AO zuFmdy@3F3!&%{31`vFZ^h!-pAO7#lBp$zn3u9iGvr8+&;uJk|0rBXbW`3|G&T-j7u zX)YG2+`^$c|BXs~_a@x+iZTC(K^#V;qQ?EJd!O6p+7>P!_;2kn{PwWh35{k$+yu3m z9$yysD*PFc$dF^0=uj#U(5Hd~Y=d$ULK7F`$Ky14Z{i2|tQ0WrB19S~xeQDcl{@@a zr>ijN)fUtr5zEt2$qX*a4P*@rUhX-po^Hx|`z2&94oYrLe7$eCH#tQ_>eHM1+v?!L z<*KS{w3?O+=LHNpu29?X9RJvl{?VA^AzQ`wm@)@i+!sNVTMbgdc^75XSOoDFqUovz z5my%{4n=He|A)~Nm`3xvfnUQH-M{WV%smuO@3Wmd<2Izedxsf2UGf?yi1QDiXfv-? zXRoy8O*EZB4Sh$el$60Jt3>BFoG?Uf{_&YVqYfy)9#4H{?sc8M!nV1$ z?j|&GaF;T9u-rzfjAVOEAzD3iTq%ILt+GH*REcV}=)S1YdQCI@`ZYtY_f|9ve_Sd% zX?f+9+|fW5iukJ2^vmFE*(pJe+Ayb4mu7ksknwlqef`Rhfa^DS?R575yT$4aZBN)p z&=sH!Y>cu^`8vd?fh|FuPw4Om1A8kK&iQbT;wMcr4zdEJD2%pcr|A8*2G^KY-3bqU zsoh2IBYgSFOeb6HJiqs1+-}OtSOcp&b-(>^G!z|cs+w&S6?}kSVujx zuJ+M}tWSrUXlQq6&0Sz7WVL&43$AC)4Wp=(EOVhAmr ziJ9}+M-9p(w(fKyF7tJ_#q*Ptkv7HHos_RRfs~)tS6-pe4PJi$&shG%b&{W;#wI2W z2A1(w=@vN}(ImQ#hXdLHhr>aFt+U=z3pkRTTsE7f6p{vUQVPn8T?-8JIkuN_^7xt= zMO(BIJY9C7_;XTkl2&Dyb?Ps)LutOHbLVpykoK%&7^6>{~%$VLQ;M zKJgM?uVyFW<3?4DF8(#IP*ke3h08|a;`nL!dp=Hj56i*DmXn^6%FV%$Wa4Xkm=vvL z6B7y+$Z%3DTW*Vqu7T$CfpGG#;o#`pW_elQSO|bt*5gXa*t<9;keZqg5H*`?4T-)m0z`JIDp6BsvX|B7oE+A3S?|Qo%xz=)0&D^(W3%;Af z{wg}n?VmL*kt|3T~WGe?uhKPUQgE%jeadALVJmjO&L%DU$taX5%iZXUHUs{o0;$ zmgs>T9eMk76<56apgd%8c)PXgL8m8{K?{Q z^xy4GSR^8nHC5Y2bxq<;ZqCQO*9-E>To$`Ecv6L+?LhX~1sN#~Zj|hWdSa}`Gqsgh zOnlcOeZ&NO*0IsYmxpnwET@66SFW8=bl57dl{^E#E^09_Dm_boF_zbysPeEwb$ZmF zOsLYSwYxh0zVg>WizF+;F@Kl7SF(7pz4c&!NGXc3v_&m}+C@gUb&oYPrSi#>C+bE< z#r35vCzsSOsv8ToM7MLUH`H$Th5lmolv4+_*Yuslo@}V7HL<)jFZqZLEeUGy7q$Yd zXLvgAUeBk!Pl~O6k&`2;tdW$FQj!DPO3lwvu|&J?(fB3}a%b-S6;7k;8OM8FakVKG zxqC^hKME}xEOn`E)@v6N!Wte+xH_2Zw3a9@{^zxW@i9y-+Z%9_`k(chC@3k#RIlZq z%3u;(Wq$jbwkz@(y?swy+iP=){sU^cK-0U0x*?P@nsu4$y{^^vL%9mP@Xq5GBwMwLR9V2WaqW zyFsDkHQM;;H&w$$*{z&6s_nl%E4#E~uy!`lQs88%qX)K_7)V&2ml)x{63^T{bf52w z3d}A}5Jh~ode6JU1n|prpxN5+cq_xcDBIJ~n*pKq5u;{|ekZI`Q@s9#UhJpR0DXh> zcWh|t8n69N>t-bH(x|akUYIU)i zQhz;HuqDKDxu4R~si`IrQB+dD{yv-rk~zF~n_4$TzatE{dMK}S^&$O>?L|+rKsM(B zKvgZ9@3Dk`5Q#Id#UwyO8z9n%j9hZuANq!atp5&_qhMBL+30Ld_q#4!e*6~ZE4F0K zCEe+U70{Xojv7O2a`v%lewJS1SM*9rdkh)>WS@&X({3;mdRhEx9V~Rol9p>X1m{PQfTmSW+016lE;;U9Ey*F z%^n@i|6khB9gcApRizCiKuu`Jrm2W2m-MVux|TaKJQu(w5+N6P~Ic02)j!g|K}Mx zN*Fq*+)oK)7l4ZR!oj(s#b?+SZQWBrQAW;Qm#YU&PnoGy16y)q*YG_Qw(iTxC8PY& zYAA^6XZAYI{icO#udJaSGM;LmsxcvhOY9>$RybQob((pq+SDuj8#z9M2ABl6Cr`0r zrhnLlCN>k0BVUcy6v%!(y$+};kn=Q9ayKqC&{qv;`I@x4qHbFB5jm{ba4J1I`q_L5 zH+bIYY~Tg7@%nrN#0)tu73`_JO_%sTBb)CtH6*IYc4Xb#MST!tRAlsDA)gcLt7xSCq zC~97mo>C8XBaIz?Oqxhb_cgATvqhJ^eJazIvq-m&R-H!k^o|#v??et$%@wIE!{oewmWi#7sDugy53Y8xxPDw#RH2Ywxnx^v*byKk4atVt)Y=^>Pi5|GSMPrB2)Mc7twCg5cZ_l}7HVi}(n!WO&oCaGi?hX57%Sr3H$s zbiD;jknS<^O+su=l;zK`Vt2wHxm=yUi3a3{lFxcL4{f|aNE7Zk(gnpu0 z1=|L5;-S=Ky~3p_CGd>G*^VeOsMF#1Cw7-t=+60 z;;`i%9E$8a6@eS!iw?(NOLShJb%$Eexn>%$gz(uA#6#g~MGqGk1rtuc{qGA!aMo`} z;_|qrCEj4rrIHy_GEJ5BR?!Brz_dT@VK#qXh=Lj&ek-CQY7bm0{mx3|WAY`@u_J~g z1k@q2YHP_8CC^v$zdV!?pr|B+VoN@=*nLeIc~D2&fANE4&w>rm`h?f#=f0pjwncna zNi=S`lze{m1fxVp@MV$ScU-biD0F&U7P058uAvd~U_hJ*==4BTwD_L&OiwS`=U^GJ z5XYkcW7}6pWEtxwT!8bd*Ty=qV%LGH(oVQ7PN9PQ3}+*Kyn&*n+39Q zY|gdNZf$MxlA|pn)JlaikHtQp8W@on>pei_DftlEvr)MFhVqGq=3DRPKo1W=dwct` zz$@R8u`yUy)*YQ95>VZQm%P_A3aj90M2Z^#HdvJpk_J<^H9J8;LAd=7J|b4tTVqtu z;*d}QF=PE#qea5whS=$kvNpUB&|Ug_Wn5ZtRf`*j_L5xTXtJ*DHEqPY90)7(W{XN*Msr5jn|EOXJC$M3)sb_ZAuukDc}5JSMddb$?d@HZ z7X8S|9jG+QV#5SHplUQZ41`$s`jNO#aKDB{V`18s8_|!)+u=iLd0V)LYI$~0DC&7$ zS!eSsBew4y;VVUqz$O?KYkz!(sz<+_j{lx}Tp{<@!S(V_3<>~ai*MtlhK{X+Ls;)p zEDcYS2(5B|dBJ&S{b8Jtp_@wx5E0dNb)%MgQ!GXcwQJXMQ^AjUTS$jd_YmsnZI2+} zE6WtW?UAWg_0P}cPhT&sZm?8`%Vy;aTXK?OIW=qvjf{`qGPSTS7%nelet~CVH{Bt& za#Z8Z50BG+!7jG@$y!H1GX&H{TM^K@fZE#oKz)g*uNM`+IvfTbnfDK7qI))2vc8BM z|-^{$B`lmi%QzBPUdKZ*Dcmv+z2pHob&B?faOd{2?L}P(IByD zvlS>L6`rYiLCf88>8kR9U*3Z@*>Ah)#27d@+H6%CjY@i#+Gm^mfI=hS?%|Qu&>#la z5%fTFM??O2ys4i4rr=zg$mRM2a$Jh4-X*v1X4`7{ceZw0e8f>NI@;(9#Qy$1oznUv zCK6z>jO!xg3VWzq)YwRMurlz+S`~DC8J>l!kz0xNz}01Vq_)=1iM)R$P-KTg*SQl= zI;#j647M7foAp$M5_qYt3b>tc!lSKv-(@v7)1(;t-oH(2Y6lq!!rFpCDO;T_2g>k_ zK%U_2?CjgXz_<{OlH=+fh?AP0$L2wAnHX?qTC&B$*ukLUMlmk_8Xb*TUbfzxt|Oui zI3xfCK<^Q&nR<`fjgkiE8IN&9Cy`p`jMp4a#z3C$CYXVqCktM2x8K$4(>cwRKHhvU zEGjDZJ+iN?t~Nj0U#h)2o*J5(D%wtdWa+ESMl8cCvWp=GT%`AyU&oY-Y_L<|TJ(Js z6uG%P*jrA0VSnq9QJ}tM4?jdzYp@g5#&mjI>aA+0*AdsC5Up3|%FNEepGv)3@2+roBEoZk5UV-gx;AYf4I4Jnec&k+y4pskhu|Ms(VDqu7P){dZvQ)c75g zD9{Kp!aWcx6%>h3!=%N}e!p?iEHn1gy{d1ysi~Ns@<=Fj^gDCs6t%+ytBIT|A|e9# zuY|!7gZC~zz!u{?7jS}TJm}X9P=f%)vun98b+KPb=a#xmd(8#Z0t;T1R|Lqu1hX}C z!I&~e>}=j5T(OZ&Ps2yG7K^5<*OY3_uTIVFC%;sQ_B}{Iv#+XgaR% zRqJt`Tt`-YJ%w@#cYJd-uu{I`HliT=*0dW*q}FVzJK6;gVv9a!^>fbmSRF2BdHOLt zj;ERY=;+9MKIE>}##?ugACk44Mid6I1LW)MA~SgjJOZ@f0yZ}C373MRBCMJj&s1=z zhhWI|zmc>%@Z{OP@FN?8Ix|qwy!R!_2aZVd?9>1GvMQ1sK%)y>Y$McWuJRfIyh zC@3gQtDY}%^AhcOivwAgYESy!fp=1rTRDSf**hK+8ZHjql9yP&>wP;;H>B$K=80x( zH=gl)z0e3FE27=%tSA-HI_f}#VsW>=2t1(Fo>As$3I`SkZ6lU`u^sU*&#RtjpX~SY zfMXQ$w=f~_{Iov-IIqT{aEvc^6Btk7Tv5ACCROtdEskyDIy9Y$f#b1#Q%&&gM>nXs zV0*`saDZ~1^VQL9v9-&{)c$@fQo~F_u|dr~Qv9!dZ}Ewm7jw}n2$2zr&Yf}hh3<@+ z`N#~~ZoEK0l<{$z?ym-TixI+U@a>M}uf5zI`ZnpG3#Y1~sp}$|WG4Q6{SQ~Dv}b@9 zOS=cma(2XRRmZC7=~UzC_!M{JegYP)5EHJrIS5Q=>k~r z-Sr+D_~ime89J>%zzCzl^r*7SwZMeDe#N%|= zY?SYIas8V~yd?X=bjvk1|JZTzO+=_7+f0MoOb3Msn2E8`s zjAB+H_c)q0LN9^@34+c>Yj|KsZ4?0}- zUT8AdN|y|QCsovW)$%FWASDIS_~1*Kz6b?CLff)Gw;p@$=|O*eeZf9`*+*#TUQMFh zUk!Kyd)s15M)(V3?VK%KNIqa8>!U>g8ELtSbW0UHJgTZ4sDQ8W_}G(MM9B{1GLEy2 z_ki6Qo=bo6Yo++Kx0Gd`>_$J5gXde1yv?NZqM*F@YC_B@;)wa%gS{tqIZl8UV@K}3*CVL`!P-6saa)B%_1luMow*wdD8!Q!rJ!$ z5m`!Vb}W!xjj@V{+;Ved{`lGD4k{RV=I+}X+1G?VhJ}q3vdqfIdC*vPj(599y;x>6 z-D)id2L~<-F|6jmh6k(+Bo&h{zrSJaFfX@Fjr_gf=4hAa8n9Du&YAXBgq$8sjd#b1 z(`ztP?|)|4b%rjgz}H1sfAU$4@Mr>Z*JjFFABe2M@7qKJEZuDEPsEqlU&Ggw**%ms=`Uhc|{ zLfzad3Nzl(9nPrnlFP9X{}Li%wiK`y+J^zu1rH6nn3@CIXC*=*=W1-%!ExySa|U}Yla*z zIm)@B^Pd<+_P#()1|Nn1ARGlOFap~fdK+_(TO>*bN;AtROTjrl1{l+S_j@=^+NsGi zSvBhNDR44jtpAjN7DSN<WXoNFuvNx#Km;3Ex7vm(swf7 zy<445+Z$2Fg@S@%YPsvu6Hb$6@#jFw z_~6+ItV*D;3@l==n3Seel3&eboPCP}%JwQO7l0rDKy5?18jlpbpesdTPa&4(xtkMz z9-0fA(&~?3!#=~OprpKzT%gF#Rm&(5b#ipnq9!63n%Etb#Y2E_9#07^_co*H7wZVs zBt6_RFSko2D{b0n2hl*gC7bW4whkQ?No1swEc(L&Fv0^3F+PTfRpDZLss=B`B=BLb z$_K*YIADYXWk0OUVdl9&VND>P;o#tixUasdR{H$)E8!bfH3ba~4MRPUi4$O>4b9BN zhuy`4f%7LGP7Et)Zn%y@snw#N{}3`15K55m;)0U}+EdK*seO@l!?{_20RlrEY~tjh z3NLwh?~;t0n;Sfn{oQxVc2HMW*U>?%n4}8e2D&AHpy4$+O-)VsiogO$*W|UewSPq@ z8*%@!?PCzJfE=@RgW8)*=V|(#^tRw!2{Ek|F!zhylrK6z3Od|+`3(clmYf@AYF9q_ z5ng{0)JEfc*c1Ce^=DWYr@2iw?TdibZpu{g-SdTxM~OXQ;3{0u!7(A6CqPTRDc4QC=-BeNRn|e zz4FUxM>OEv{Z`BYz!~}7GB%QCHNzT2!0-qxGHZ7e2(RCib&>5|9t=1%K?)5#)WnP$uU>KGs;0*R#SIm_;JL||n3&G{-&t?f z7vSC^!Qe`Yz^btBYX`ARE8EvnUjeXakuSzMLWDX%q$ygr==&r=2~K7tQZf_Yi-FCg z=jG&}ux9wX{^}9d`>qhqqzN`YfD%Y6;Cb(dh&e$(qxjGCa|MzSUYmX@Egc>ERJ6|( z6+|0j#bSl~zm$2H(~@on?85__!rWn?JPHU3BC-=D+i$s+$Ho`}2>)H+A)$P#i7x&=@qeDT>2V=v0ZeXwn zZoLQ?Y3FS-g0419CYt`t*Yxnv_kn?)%d-QG=g$kFFg})fm-!0an*=?RZffL%!d;C0iw$B$(`2iB+l$Ye>y#l@$mi-`z#T*tNNdV1tuCaWfX z4E(=j-&q0EGZ}5*DLwE3Wd{J;)$!(J7?(kHezV%w3vr5D#w2eMo_E0u_Y4S5-=J;p zU)fgl>zHz;nnv|fd=SblhE!sVk|wb$RzJUH7uMuKi|Z6Xz11Mhu&UIuG4dGmtZCJL zIux0qnyxvPEM_2FQ5XIxvlh9Cf*9PVqV)?@!o8loIh(af=BqSy@*@w`K1GG>_#aURBSF{e5l0N@Yzq_hcS;uFW#0qIxED2`B;P5a}z$}WidU3Xfp&|C|F(0V`kj34Xr37hpeJQYSXgBm($D!eZr}LFXED_|Y_}eE|(9L#GQOwbV_0IQYqQhoaPn_Z&@%-<+S@#S!jH-00eRLKmqga90ebn1SfqLTxv1?XTAAh5M7{x{{rm*z zIYPfDnl0szOFWi77G|IK+K~=j#=Xesa3`0aoI8c1zRCgk>>}|yzOT8n;Jic%fl%Rs zqufF67gKG~IGlqw{&KlYR`pnk;3U^#8@I|6i;V2LJ9iXWnSh5Uc2FrGo2m2tT(KOJ zhWc$Of3yw>REqaK*kP|OFFuQ^dbNl?HA!cZK5jsWmPH_X$WQFX^9mOy7lEe{kIX(q(sE8cOyS24fgy$cJ-TfCF!Fy2d`t^=#{(B>c3tVr*#*HVg^>c%HOKDj8N)+g`_EG(1853jv`y{P4WTgkC7`uIqI-&NjEQYO&bz|*#2 zn4F%2-}4Atg<3#~MWt7*kxgL8``u+JAVx!cI;KP}GoMkt8=VM`p(3~!LR3*b+n>T6 zcqoh})WKvSm8Nm2+b`7)5C1uJBGB!tN-?}Bn$@$o(M?iJ#`5Vo8^F8p}K%VIik zY*5RX0rAf2bM2xciO9xCNCfAAv1MC2N3Too*JsJ3tT#EHw<1PqY0u{rEoFsx^up|ta?omfvuX)0+KTO9y+rN-QJK+$Us?1Y= z=eJP7>O3&!r{yvC@q!Dawns|W} zd%b4=hfXb5$1izYt2Q24z5(8%?7F&#PSiNrL(zcqq=El@rDa7~oe2>9sT3o)KHg8S|Kk_l45>H<9}+cfJ?`3_A8j&}VcOi}ko^M?SzC zMsLmYi#gfQ%fOpmvKnObZ&?2iTW=j!<<|8JBPA)F5=x^25+aQ#jUwHW(k?5cOAtfYk2r0oeIvw3bx1MiM8!!?2 z&0-|++gzKGY?lmL`p{FqRdpfg(gvKNIxZ!Hfhr`F$rBH_2rfXia&<3m^f1P&X}RuNjDQ?=U$7E!@-7^L#7I`(S4=S<1&#KJv-e_e9lW(Et=@ z=I3+&W_bg>y{Zty#$RuQMC%zD$zP?`HZX|T+IkGV<m#N(d(SfiR47*DKKTR+&Zsd`NQx|(=ri1G9$K8C^R z^8ChYPw%E}jS2dD54f%z>3O-UKX{OLnYN-ejmB$iM#pLRrHISLD4r4?kGg%=ps36W zO($~EUt&ScYt6lLqH<53J1U-fy;#P4j3Hj@-bAx!o2vHkT9dtrFL7|lFJ{_@vy;X9 zv-PNbxmaC>225!q^c`(xdbB{w-c7EI>m{x<_K zA$QUH*ZjQ2Xoal^2*UvH(!ph3V73GyuL}~yLLJGTO-Kmeb)DCKo8)=2^2T;G1Q~56 zk-kg!UY5aq+!3CrCdHVkwzTnOMzd!)_2BQzh2wal)*bNh$u9^H zj}Ws!3c}7&i@VzZ857CUeo|K7U%f@qQ$yPWkUePemE^(kiL}Tsb&VTgdIX}w4A8u0mTa?U_q?;%Kg?0%cmW+_hBKK1FI6q3!{(5XfKli?D50>^>#!z z1w+$p<&ZI`g~xi~JRu@&bs)zn#&YVdr=(@S#X1NdS5mtc5woFW1uqz1L7TDo7VUFOoSCxMN5V>av}8lle{^d9 z#3X{iMVLxX)z|pz*ySUJ7h_*~PIk^=DDS>ac1$TP&NYk6>uUZR-`&obH{oAh>V45Y z&6nodCp78HuzryNP#nL%y`n{W*O!y8l6)XX-x4-DPK z_4>n-f_2j&G_5TR9&$*Xq`z-ycu^QNnzKr6J<}A7G!;AX9{P#SfIb7~E;n`~zwxf? z;_9k)-M-?D0d|V1Q%`;eeVu}0oy8^MIs0mcru1X188zYiuDu8&Q0L`7-f;z7!f|or z+7oJYWViAk4(Sv!jBN5(9hq$1kos}*qx8A1Q7-I7iNmc_?jf{?)%OX+1CnsHA=M>1 zmi5&2szlxe--5{A;o#Yo^^lo2u70&2}vwcv#GRX^JanvG+n4)S8v|T>=-R5Hb`XD%pk@+Q>$QAh%*d0Ft3$ z$|^>g9)5j9C^hBu^|o9VV-B?R5_)0RMnTv;^%id6@FH%9ng*qN|qGI z9E=lJvzBr>Z)}b?Og5n!{M11Hm@H^K|=i6(c6qj{QvubH^vD2fN6fg<|J;QUkua#TIv8XWE-nPq7ATWUB5$G`k4f4!$f}71?e1+T}8Pew&8J_Pv1Mo`CmZ(|GaGmI6F)&KaylH}xmfSkbr~YCWRgtq^@Uhy2{^B1IxV@1 z-NyeBp5PR5LyA%^e3_X$|8|6$Ud(ca5`NyHsK&UX9%*@dA^?yCv~)AUgn& z!QC|g5;QWziLV~bf*{x~Y#LnHM~6N)nU1ab)=m{}p3KXM?=f|(O@zEpv2D7>MG7M7 zIpt4N!A_?E?cvG=PhOrpyQZ$h{{G9>83x$&cfl{?I^gdX3%UfDn?hLQ*w+GW9^F}ZTgs~uT zfUXipzgXugRKJkfS#uPHC3olR*rrz$mua_1mzXb;DGSstDnbRl-&AS;g0f*YMj9Z2CO?n9r{MHfK)tLdq7qnC`>2S|aF%v>{0J)6LgEu3O zgs&M?;31&=pC4(FKY#l3s1Xtp@`Iz!d+kX^bCz7BmZl5<8vvqFNHP%vV4%Z)wm)+&J6eltbyhi~-LR*Ix9!$H)js27 z3e+?{RzUCYkG&uY)muO(2$kJBb$RA=idhoJmVapJ^FdgMtYg3A7Z1$A|KOM7kZ`k$8lYE z{)-oQcgkW&8l-N5esbMyeKHz`K|HrwAGK@^2w($18PT8zWwzS@wm=A5l{7|wod3N= zwD1lLS;HT!?;96_*I;yR=b-mY3)Soi`G zj^KN#!ZSUYci{X0YRg$hk&80mjJBab&WY+F0_MI~itr7gu} zWW>Vc2+eY{U8R-8K=5Ogs=KZ!5;CzrS?~uX$Sx#B71zd{*L}To`=hM*-3-kK^09j# z=PASgPZd<)09vw=nonr1#PG_7-UF(1v?f*hXKMkbIxq4yBmEc{swyTZ44@wan*gG< zM`?r?-N@`)jPWEUruX}7Tv}zg`j2Dc8((0+xA_LpW9x-wZmv{J^-suo|6w;(#%UEF#s|PxaaWg9 z?+B4J^yau{q6bUHG;Hs=h}+kUZ3czq(wxni>Ye4tWYz1K6oA;$DK(A;fdUYe3<&27 zp(ENpaq5&fppo*wb!$vE2kHede8kmb#VGo?(gz05-X>AP;Kh-!T((kh`KwL6|3k=h{n#hdPhAtNx7Rna;xs7a_#HT3X|ebl zfnEmVO;r^&aQZQ+0WUkX665Dn`Q7DbcNO4qxXw)RU&Z1%Tlkz_eM<-rzY~GP93VPG z5N$ZYfYA29lml5D`X8(^DA+kRl=qtygAx4um{0IE2(}44Y&hY8{o8LyqC|p2^QGGjp3$ip$9exNXFWE^xEZ zBqIY-+ybViiaI4kj>4qqBvORpppWYai$#d5TTlg?$e1&H6TQ1e^$tla_rwv7{!IT# zxGGKAGS>~d)48K#QSn!X{WQuOjLGNgYM3#6Y0r zJ**6e^~v@2SEs9uCMUHQLk;HmPFOSv&IC{4xs*2eNDD^8Bb$Qv_F{T(Dg5R_o#L-t z&%AyuG99foUhuB@ezDkonP}#tF5|nx^_GjNapwczmr=%^eL=;j+M}9n{|nxQd)I%Q zT2cI{t;e4_7%>~)H9cRo`U6DQcR|JkQtG6x)_mRs{-mzA#mZmJ%cntasZzW5?ZqA` z)5#Q*_xxV7$o%r5bEo@-=}#|1%eG2%9x3t@M8KCve#TkquPZ9xMSnlHB2IhDUcoA( zjF}iZz}#F8U_xzE!?d7u3Oi0lL3ANXQv>!4q~KV$vA$SQrTfk!vogFqZ=MUE`p#MI z4i~P1SC1kT<~9&xqzf!S+<(@Kvw4L}-r1QyA_BypvR44wg`yMCYThf19EFMhbU~%S z#X_+H(I+Ak0Z|b^qLef=NI-QMSJxShu{1Tn4uN{KL@cyXQ#>JDAc}lbjOcl;o#m6h z^FxuykiOv}XqqXjNOa+4R&cUl+E^T0fq!I+eFTsbD7!igGsNEV$ zJnWu<0V*CCH2|;xd=fmLMx~(uQXmLT)SdVLux>H2gLnTq;Rt`JrZ~3w8SB0l8n3ZZ zI+yt1K~6CuP@()MP(kWhA@8>#o%W9hO_+DD4cQl}|34(haS6uEetvT=+vj9}HlvPh z$AWbavWvAf2jo4#e8QU)X^4>r=7Ok~S9K93I2=JXHa1_rzPvhz`H>IK%T5Z72Hb{E zY|Pet%90b2usCr4oe`SGSeXMr`#6K>X)Fv7$ZUY_oc(jn-8P67CdGyiWy=`cR~LP^gDQAfME`4e12dq4zhljX`v|=mBwUyPx$l1Xcs6TR@gsTO(h~ zToXl|aqQ2Z8o&$4#F58Vg@ZH(Gz(wD=Uqe)p8%*TL1Za|bOyx+RG_4-6_qN2|J=0e z$4&zhm)?J-KD1X7YYXo#1yWQ;=RevW_7^s^w9i= zWzJ{#A)lx5`^~AS8}@@OIFFa7oXqERN()q%`A$m-4c-5ZkCbPqfO2>J(ibfI+TJu% zML+BNcqB!uZKua$`6zmUI^zttD+*Nvq0R8Lm3FehY5jLFOrh- zP+#qUbE22ZAz*~UXIvWE`S3Q7MPNLNh>TQ+6cb?3LFfXx&yqZE)wn2Wd;u(m7>aiX zty`XT8-L}k`hVE;F7Lv5!}O$-N@H8Rw(NAmdUKY?q@}^{$qnHXOB^ZR9U2=wubWlH zb%cgYr|gL44aSs4NHAZ1By9Ne29noUu&(!VWj=d_a!ahYaz3!0@YD&zv+hD1@2bB6aUvn{ZZ#U&i9mX$P^ zKQxCDlaP>+X&V4IzCSXOUK{!c?mM^<_k7sqGCZh8M(m&7#K$-SXBaB+8M zcJ%;(s#*0|FQg>WpJRz&0n@zJITe8yD0_?QPxq>*+w@F+xv(i^Vc4gKebr!8j*wr! zA?i3OF|b*M8q;dGh-QEYnNJrn6Bf9L0o`s`4tRdx7{P^Ca8f>>M~~0G6H6Wbn#Rlb z3M8Gt=Z~Gt)lb%=jLTTJpE}RpF(sE}@pfV?=7D6bmMf7|i0)RyARLA5!$tJ0z8*gK zOr?cQ?cMjrhB00&X70lyEm*S^{ocYqBePS$TES5}}mAy(R77C1>Esz)m zf48u<7ILlYmftgVEv*D69#<&La`);p^ksMG@d-sh4s1%0!nN3sbI^5 zA(*t={fMYG+DA&_v#hPhOR|@Gdfx#eE#DcRA&GzA#_o6XBAPCv)})p0qyZ_a^)zjePsC+cTb%emI~mR-nPz3&RrA3%e$p$n4b zwNkkK%UNFD3>(uwDDvfn;Hh;5Q25yGgnqYD5es0|xkUO5@#2j=s;ar)!J4hpMh^#B zU!Ne$a>BLR0#f&qqAxVmB-nC-dGwp0uU9`z18IcF`V&w}=c%Jfp}$9%jqxJ@#FNdps5-q2$|137K6;q$2W zxkkW|5zPeZtMZHcGpzQGHZ+`!ypWb(U9C%Hp8VYk2>QYU_E{G(ZB}{mXllB(GAkh< zEmy{>@82k}6ft@#BL%?C(X!YqT3>z~J-~9epyN^9%WR}VnH(?a761k^I0MP%E%v2# z!sexdXDPOAX3%QZUcz7E<{f3ph1&{jbCciYMY54xgedm{m8`f3Huh8B{0L#Ker2zQ ztgs(}UbE@VnF&V2AH!{Oynk-u*Z*C2oIUS&d`sJJ^_#sj{Lyw5a)C7Ux#7cP_BH^9 zwcDek8FCe5g{UQWdhU4a^eRB?wYp^QGe1c&9Qiw2kpvh{UJs4Xt5_oAx%EzvF^4#U z5$z4=My9751K$-EYVMwUmf!wej*Ik5W^P@9XX#KR0MLlMx%U$yCjg66JEElZiG9ne zaNuSEO+zS~(!$EhT{;%o+zld2*~sr!n!zBbth40{y2n8g5rG@BQdM2u&g1*4bM$id z@BbwqpRj>Z4zh9LoUV=)fP#o$(7SssA{#rA#lEbjv_s2 zY0zfrw%Lr;>V%xDds>WX54F4T3aa{k<2kRThT0Ug?tVkr_d4PL(c^c?vKMMe=AJLB z?RYqB8V&Ds20GD8jn3D9H3(KpR4R}Xav7_wZf10`FFc3gRbPKT?zz~dd-MOdyd+~Y zBJwFo<8{}-|rb8XDB}0NLl3KzIz(7 zPZH}gQ+m1(!4xaIftV0rxSa)LWl%W!9mFts4;z!jKO(qNjKzAHg$7;TuHfb!6`SrQ z0s%H_`@UEz&Z5t!kMc~s87tk7Z{+Sj`zUC?;TPNA>LV>fdVO*0VmvPMs^4egdO1!E zd_?{jm`U*$hgoi{!qe+V7%nr}=;0F_$`vLLeMTzB;YjB7Lw>OUMnGqj8@cGp_W~+K zGAq{i{kUkoTT~=Dz>>E>t9ZlP=xXo68hCQRw?_adXB!-Z72lP>j|KtDIgA47#O4Zj zA8v))Jz@qPLx|q2(m-8DCj^)lz2d>Bwe!cC7wO&u_at$Go&&$h zz`K}^#Rb}W!ar)X&#BlADA`2hm%1_L4%!*=vR9c!Rpr!ifBXxrA>SQh3jN)`{{r7@ z_(xBm&2!$@k1x9!Ra<}}METloEhRFxPdj=2VTJ1l3KZzUi2(q;IT+E9DIK~tK%3Lt zq5+43ZV9X-eKE!zxXPz;s*k2gFLKzx7z86B+Pi+?BN5oN)9n3s+U9x zeW~Q*A9~O^$&6VJ-_4Nn(Noa=+w4<6_w&d7UeXFliDS4rg+24{(1z--si zeMgO#AS3(WHS0~{5 z8TY+^5mRQ@&+^3$DL??yJ!bKZ+(s<*K3Lrw$H{XmP?3>2$8k6L8K8);k1Th!lE5kh z>@7x^ao8w~#5K=B?HSl;ddt|@*u}XY5ArQ*CoZsm$9V-JP0> z%W-!8e~A;GTuIMwP(gGGp1b>RR0IazzFpJtP?a=>lpN4>#KqkQD?1}&BpFezG3T8t zDY(g@)`Z_X49M~^M;@k69tx$8?BCr%)8rjtK8c(!IOyru-^n+8@i&0t|Wca`ShhELX=#n*mBnW(e*BpIr$;_DGo~!n=ZT?VNP~FS8 zI&E-Xo*i4fU@?Kq396H!=eJ3UI}WJf zx)%p**{TR^su$dxxPde8m}>vYr|l}jU`;tYJCC|bgWhB35CTks#M4?Lj+p|}j0F?r za!n_m&Zi+@A*y;J(J3Kv?5f50)4l25JTK>sFi)|rT$J(An*Ux+PoPF0mG*A2+2t-s zVco2@l^5n7J>jp;50H6#>Mq#(G(UGJ=fF4L;ib^>lMdzCZIF+FCpUYnlb!DEX_I1JAF zAq+|=y%%9wTxDac1#*hJo^^H?M;{uM_@lJ@c=i@|J+otV<8rd;aWn4yME$-9ASl8* zLWe|+2pZD;PM)HY-Z6R|*UXi!qSyEgH_}WhrWG3OTW{Kv%q>?lfJIQeVuG8v_xbq; zjj}<_k1IOfXB~)9p-zYAv>MM-?(TT z&m6X2J(-0)Hh-q_BHnxE8xP$wp9=jGf0vG?3#HmBK%8{HoRU(fdNA`s!}HkVztQp* zO)v1vC7AB-@P}n3yIuWxcj$7bm2oKz2)f`|M{{!!UQ$>0JO*OJqF7rZw+A;{Y2AF& zcB$ybV5mb7?n#R6^C7ykho_oFd9()DzCs{kIWy|D5T! zDSz33Otq$M%id?7!#`9`goiyQ_$Muh$ZA0iy!y`4XHZew1NNtc#6+gu4k|zx*Vfh+ zW^(}mwpFldi8)ZL-p%j6>8+U%^AfHE0KBSZqFH<^Og;v+<-LGn$Lo4ukdwMZp7^rn ziGZl?xick(&)CPj6o`SKy_f3oG^&AH0EMmJh7In(L5SauYf&!X1Wu8)$GBgvP z#N1l6STfa2q)}up9ARO(N=Zwge0hn8)D>6JlXWK%^Ox>jx!>P3ukZFps)^3K&=v)c)?U;WvtUxr z%XqdF&-W!rG%wS1mgttrh1w5zOr`iUWq1u!c-2D@#@2LV44j!BqaTy6pI+0uYIjMQ z;kS(JoXUYa66QU3>)|W72!ctI<~MxzpN$=NtUF|Lm!F}JPi#mZ3a4tSnt|xQx3sT# zn?Et#;wwttkj&}M-(U8k+V4PNJx#t(&gKklQ9yt@tGiLR1U>UR6*m)-TU z)46UCsU~F05s~Y2u5os~F}{IZGB=~qwhm|VhzgHt3NQ25?S-uvl-?a#muqLQaS1TP zhx$xf&zy?rh;ZSGOpql&_%A93E(ie_9pn$aJu-1@2-8v9)+y8j2O(to*5D#Hv{_>P zBipcLI&26Og~7RZ{(y$|Ud4yN2?qs0gBUI->?|uPvM7;*dv=fV8RjAI82No*p!N}^3IWDxY?DIUdu$(l>$ZmIBen|*{+H|iz2uluTVvu>oC zre%+tratJ6fF+o#SA|%C1(#1YbSiN11t`Fp)R{qs%M`1i9eNV1!W#L)pm;DLTM)$L zF5)dMxO|-fkmq}pgR;2ys3%?-*nl5WhmRz-I#>~(2Gi4DWUrxh05|EN8(dbSCwHx` z2E%sDMd{NEm5XEM#;T0#)U)1~}6o$Zp zh|TIL-I?|&UO9D{qitnaaGn3!43|!tN5ERXO%~%mx$QOj5X<4O8#k}mRbPeZe?sCS zxWxt>%tI!Al5mQH$Gh^u9JpgwMk@*7W{=U_qP(Hy>=`+@ld(#)_^yI!&T^7nODI%Y zb@dko4n>be7=}MT6@*x-%6m$1xyrcP7z!~5L5anUY|UB?pwlEmPr9~>%;iX+DDKLi zJN;W}?!EnW+~We07^AY}&W8X=xAe<{?0I>g-QfG{r}-!{s7Po@6y@X_jBW@;?g*2w13iQ7%u}y1>f=)eAUspo3<1D6@OFUxR1!!>;^-Y{-km}ao-~Yw#p5JCl@s6jDi&%K`%rk(L zAVU&heKX-y&_=0gXpmP&qdrZu_VutlXppV_5hVu%ohDr6u%~{FqHFF>fvj?*;3*?y zFVL@RG>F4r#c+=r`?Cqm|6+ynmh1sfk zZEY>Uziy>V>ZVsRE+=ac|$_44v^p;zVYaA{FsdmcIQ z!)#{t*gQtk9m>ibv*2M-3MKk*BQ&`HODtR;c)Y8 z($g!$fV3LJw#Zb100=~Sy-EFcMnqwgz1fi*uxRC2o*yLBVQe3+4y}uzR!9)TS z=o{EZV&6Ovh8S$l0-w56LDh#SV)s9d*WB=3o{^P0{+9PYdCA49(9QjMuNe|H=D#zW zo#^&$HxZ*H!oB~@V#qCnypLZk&gL#KA3wiJ^9Pb5VDJY%3BG?oxbcS;fK@8km8vjT zxRFC31z%9pbTfGQ9jdX83CpM{DQ#+heFnxHt`!raXMr{j`5T9p_Jg6c;W}y8h5f1S zUGuRu^p{v<4gLe<79G2HW-~eC9jOj_;w91R^PzrUgP=O+jO$BZevg+2wfYQF6qjI% zy@COECBi2HFK(0}o;Iai^7lUric4ho%!7^ooM}GKP4l@?`5#-|8>sb#B*=UHY zB$J^`m?F_+5K4taNP)V{wiW{evM&7BPu}Ao@e)$Qv#o<^QWDz{Ski}gE}rb@agNrK zhqAzSPN4lKvzBTI0B^#~(0=9I*Y%rce{T9YwA-(LB&BV^e3t@p??!NYYw+%f>VT#P z6dB+KgVsVD1AxqI`}?v7^h6;Qnx^I;y9O{*dm7mb@J``aNQg|2kptB)h&Sl?`oZKK zhO9VHUfzM=JLK{<&~OGdl4E!u<&*e%hK*qED5%L@Ew}2N4vByBhXz+T_69hwS$+U|Y zP+?@mYTzRW-3r3@85zBPl5Ncb8v~}l^GJDD=6av13Pco~qez+_MA89NYhMfGN$>Tu zl_zuo7AOEXh|5kmm4`k6v;fFQ$S zzZqD^R`c*l>s(g3w#beWF(hzkB6k!Oiagf&|E=x?6>-a%CRtPk?#HpKMAie$yRaVM zAr0YZEd(p!-E!?0{|*>Dd2JwFb$zRi|lgLCe}ooQ(pw4p`{v{^c+69RxOBf(O5S znfH=XO0UBy+@c~o@}F3vrd&v$P)~3cN0KqZxM=>hUU^(ThQA2l>RtFTz$5?55-fgi z&RC+aai;K*@~{&_{;bvdVAelYmr{;kL+!sqG?k#eSXF-Nw;_e{)rHln`V5j%JK z^a20cfin)TRC~x4IsR{U5PAj>yGrM`?3eI_u(ig1gRThJRN}!>lUM-ygoK0uCI#)1 z!I(C?zySOE8-;+5w!!*_%tDJv@9leUq>nmU6obsVN_d-^-Bl6Z#&n5I@`|#Hh;=!R zbX_^6^obj{)m<|*H~@rbZ(GcrTCdkPXJ6?Pem2z?Z@VZ-L>l3eqo_`bqf6OJFj#r{ z(O?W0Gfco?Ukk!Yc*?S_meeeL8ZIm6dUuISZjmkM`DE8a${d&R9U(cprIUWDOm!gWy@QgJY?I=7Dg^vXMu# zn*Gr!cR5F}yHYiqjBmSu?3yfp8+4?e-N z4H?OBbZ&HTYzgbh8Ox_;LLLbFAFl_^{!13J1J+wPq|J^^{inr2qRE zoM*^hm-(^3e83{fj(!wNeZRDzt-yV`uKk*~+I^OKTZ@_O<*Y&avphsnUS2+{d9L!vh}W=+2%fo7 z`ec)2XLW37eO^G6|1cUpWhctUUQz> zPq3b3J}76!{M>r-5owt9KX6QU|IV8d3cuqU(Zwj@9VKZ6XHZjX69lfwy~fQZT=yOi z+bWn|w@cCz*;vbyr@iN}ncp|N=`p?Ovb?8D=?~WuA@}Ewj~lH+oN(}zM$*2p(ClGa zQ~C{a`=Ohr`~FtW;O-6!Fnywle9N<|kIqehQrWH9EzpaiCui@N_}CrcE@j)|*C0$V zi(+?hpr@b++}Uw~TQ0J|Y6WvzZEJDqEq>7X7=b6CRb&7H{d(n6EMy>)URzk>lrR zuY6zT2(*Llx^jw~#)KwHXYNl*d9sueR?15M zygF=*1}TRY`{ko*C#xr#OG+)#bR**x$Rc_aF(SG7bf^97-38qWCcy|B=yKZhAbwAz z`~{1Wa%{5!m3tv&amEn+T#+p-I$F-kiUVYP->g1VllDBOU|6ymek2_FIRyo4ya$$? zGcEMyQ1B)#qU9-^bW_ffkn#wm!o$PEA|ok&VSIrb4L;vI#>dAGi;bnp!+Y$s)n@co z1OG9M)YHpxoew*{ekK2faqG?}5An#nHqed14zb;y;e zuA;8ls zR)|2v=Qy0_cBKJNR(3WS71eLXD=)81+bj}iX^qsQjv=A?{_ zJRN;DLcXH#uhjCjP+!%ryo87`Us2CGsiJNZn6)0m4>~^kZ>gvT>|)l3Xs@;JJ11PO zm*1RcvQcCsmsL=>Q>=3+S)C~l2?THO272pH8iSHfwL=?UqmhbwQ|EDBiHW| z^whho9D;1g)VrIIrST&6*RO{_BIn(MyDhL+GG!(L4T|Lr3|>ubLnzunAq~9gRuUut zmn;O?-C6PQz&(Y!d~gC)*s`&+mv8h&=MUKBb5}+@4T)lE7V8Cwo5A?+V8xlT-wh22H3j@S=?}~~jy^VQl$I;|| zpCcj&8oD8TZ)AO&kDHrpCE(}qFigQ3GOGIeDQ|{>3p|$EhktIE(1M6ZoD45*ZK@b% z={4ONBpUDo$yx2%#NF34J5s#S7OQ39)UaWtBl{j=|A1%rP_VRQhfmaE3n^b@zXk>e z2?*##L|L=mqI(3u4}mQT046+5!0TJJFDfXdyroMaQN;Px)VztdHqM8UYpUCaM_4}J zpr?^hy>~BKq;>sCX>l=C-kXmf^*281YH48~jn~FY(Gf(^(MKy;^wZv8Q}#wO>zZ25 zj)0;}EG@kQCxSt#)Nt4C3|hxy9xT77TptxEZ-rqhg~iXM8_sTy{&e|#x^L{UoO0KD zBko*blI8R)KE1OTte47wv%_7n8CTxygfYCv)rx4=;^Cyn?bi&|4;Uju*A(&ejv!$Z zNpZLOmV6Ea=|~{)flYPUX_lR<-v@iipS&c-SUJ0|!|AkmQ%~e38P?(JgTILw$-?S^ z3V+yUw+Jf(?BNr02_XxWi)F&wk|;Ng`DkKQh11r#?`5NVf6c*CA!45^f<$a(8bMf7dV}(3iI_Ua}Z(nDL$8T#b?=Mklfv)+r_S*{X2fq31St zDL#!*4vUv5m8>Mf#Q^PA*~3n9_>oBPYR8WsZ2msrA8);U@r@4IUNf^-Z$K%NAa{O)LJ~IKswA1WMo=XS zTF0PW)ZjqH!X^6haXx)4m)~VU4FZb8nPWbM4-e}R(F=7TX9N+m6hmic=WHlphw1fO zg#+fzA;cKZko4FUcD-|He;N>L&IkN|PZGs(Gb(rRqUzv{8dIT<*yV{AzYP@XWPI2a`CC|V30u0#LvJT5K( zJa3JUF05Pqg!bf)nP&cxSG3yx^ke);YgBI{J0D_7g7ocJcp1140(J*TiuZ{|ymIKq z+zeaHV1yy~&uU)x9SplCjmxJ84NFsPhHzN(m(GjdkX8l297rFGubw~OoAUGh_s0$n zCGOa-!goe)LKZ@UzhB9@X*GZ1kIPGH>dpVY2lE-2m{@*JHh=e+`EF2jSaB};US48d z|IJSurT6JKo22c_rADwFUd2Ok|g*neqf$F*Ehox-aZAF>DRIZB^nu69n1Yrs|Y^HHhTLq6{2XcDTqA98P#k8kn+ku;7t zMG;C7BBmQmi?c_VJdwCqwOTdXE;*>0_8Sg9NKtE`!`NB%vV-I z$vOuR;eS;MDd<0d2TcuWZDJJuB%b>H&;I8s;Ub+vv>9?NV3s56;uou!7(Fx{D0-yR zh>4+=rgUYck8VSjGR!THFT!QySq{(sQ>-j3_-%SF?LctXz3lrLQi`go)Y1&D6!8DA zdQKkhE{6sMVQ)4g^)Sc`dH4l3uy5p7_%zU08WfAjTA%x|b9u>wI?w6v8|AMl+OjU5 zqx(xpaSIE3N3l{oaaCmP?J~Ov2aDa+v+9bRTa-7b%uFVv)}4#4P~)o`X~@gwg`ORr zHZe+Tu1Gi+=P(v@?2sO2E0BXLHuYzp%8PUeM~>7m%#I8L%_EUU4$3f3|Ms26HEL zy$(N3|JrM3TrIHm{Jb^qaxFPN%$DMYh+hSL^|z?TZP9!WbP0A#Ye!2G=`LPsm+)NS zY$fpr3W%W^p6NbBzvxXC7pJcKiAgi# zP%nVHKS59OQiDZGt{=5pFd6)s`N{QpzbDw6FktdKE=b5kg}swxQ;22S4GWx5YVbYA zZij!MVxS;X-!HQpxPnAB!(qiQ#y$C9gm8X`c%t+4Rz2}eX`=v+4=UbQuKD0z@b7a_ zP%^7WQ>xcK+*>61s1e@8dcGyEX{)7~yT&rN?9INiG4~*iE}{APEtHKwZCyKY*EU;$iR2D z`vM$i=8k&pJ|92I6=8pq%FNrgXA;zP7j8xg+?;FoiiJGz7yyaz9)D>%?;6m@2-~ z5R~Kep}{t&D3Qa%(_Q7G&DD@^V^~0s-7YIRu^xKN2(geW2_Q3&$UK3}VRu4}fakHd0juQm(DcPrwYc z`17sE`seL3xRc`7pFgNcxn+@pbcPE}z!VVFP7<&UBfVkXk}}#{B~=@1_O~B&qmgosZ~iLd-MZ zh>mRTCuZZ|$Z}twoORMenzK^L03KIxhaka0Krf%e0Gzb>^V97zxP3rI-C?t?Gg+|9 zk2-w)8_9=(==rI4jVBVRH?2O5Y``T3mqbNJF0w9Nz-=cEG47l-&Y30;PxtT6mj2h} zpsA%WrbktFJq~&)xqkU4)d`JBc&v;Ncpo)zZ0482nYWPDq!20k@Am#oV55SVmlX+VXPlf{m3^7=lJH`B3mJ|Rp1 zAhNP-nbH}0lQrrmtf2oEtGnL#iGdtRmLL*WerBb;ra!9-PMbgll*ewG*vdHPqv5ex z=Jlbu=u?*!>QAt6+-j+}ea`XZo%O-W z7{~a2lEBgKTRSM^6vFFe)5uSXk$da0HDIST6g-86fUHO_pM_T~-5o+RRnR&Sn>4%D zuClpb=_=x}qvaSF!}d}cu;bR5G9h8%h&%oFY9<_@7L(8oin0E@JA!@W5Ge*qyps{yXAuISw%le5(fAiA0+ z>q;fm7ugqQhcyc`_y}P}K+z+Lj}b9zY64f{(B>JWA^`}?a3K_(iTskLvqKmDH+V7B z)gRbdvcfJ+{;0aTBWcZLJ{RAk)@6C6pMRD-PR&F&+9I^p&ECSnT1A%8f9%a3^2MCh zG_skylu|hw+!|iHWTD}zDss*KwrSqSwvdZ#G`PcjMvUT8a^zqes zI7^%Bi+d|9q2j+}@Y7U-;o4X9`)@Wxxi%iCFz1j1a3u)hei%CM1;qB84<%u{8RKCp zqZzeKzarqc6~kayw^ncvW}DFOmQ-n0hb-SzO}{7!f&s@st&m+(uhA&2WUE9}>70box z*S_bjAXHS1@9bd{i_zA_GtwMHea-jNNX@8>Ep%j7!JyE2pYNz@5LJKv8N+^?jL*f8U|>M-Hgt&c4=+X$>3S;^l{%gJ-W_Q zeVc0e=4qLtiD}^OZ(MjAAkIXEhNJ+zYdMtJ#xbbwZIC~G$K0)G?UA%^66kd2t6JR2 zcGx8wGv0T%_;RJ0WPJV48!mi#9>pBcy33R?8G#251*0cZz}GCm^rZ}7T$wjLx$w=CcJ z{WeV9to84{Tn;KW4!6%8otj4WR(-7RGzG;TOQ`yFKSEi=DI7bF;W`lr5V~Vnev9GG z0-&FG$ji3e>HhKtykujD_v(%E!S_Kbwqu`f<~K6&{`+8@@>}JFjsCy5+^$3Sq5aK( zU$rYjj~_pd*2c$!)Q$BL5;jQxx@`7b0YVj6gOA`$SgwcG#VxxOg?$;Z%34y zgpP&9W_;>;1cm$NCrc8sOSDnv564#+>nn?T{D1x5w=rQ02^)@vf`~fe_=O=qCz8U_ zQmTJL>NX~CN5c!>+vW{0_5Dof%12>pN_n)Nbz`))tH}zg>UeOn5&H@gkoeXgZ+F>w zp=|yxbV~#sOVE-Kd>MFU!HM#y0g3lZkS70__W%$FKH*{i&k+>(8+Dtq-0#(31HJJa=Hw&<&p29u3NQWV zT3FX_KeMTgt!5|pI3!+3WF#SuySD&Ee>1O#eI3Bfcv7EEGJ%@C=t^|UhT?q4d}MOT%n(_*(fuEMbtfzf8tjpY6vR%&5PyEiOQ zTT{KjZakV}!!i=>2Sl3Hc@z6tmnU}3lStrs-VdfA`37MCIFqifE|vG%Xeboc$N_Af z<80gFel`0&`SDy?JN^%;+b)alDpsC5i@^L!W4hf95Y!8{h((=e6>4#FB@hE?>QZ?=wYv> z8%>|PBH=^}w?+T5%}j~zJ+({qJ3kX!EO8eGP=ZyKP}_ijy+UHPGk#yT4_{5_%>#4E z3EESq`x0Ss$+bj<=h3`>_ihFktqxTl1WzaZYjKf@|2zC}v+2w{Ac>o2db50H^XXH} ziPl;E*`pw#+3c#-66dP3nw~ES_|!hU5XAQN>sNr;;PyP{VdOrlUiI#cio_Zn;4iqM z0kFEejs1i2{OEt|J*Mk;NhK{9;}HLPmQy~%AePPK>eD_q<6oS{8k(uHDdb#mcGCot z1mUm|Xl=lyqr$EL*a*4AY*zU|sL^zOJM8GK82rZ_?Z3WizQUR1j&`jbi-NfK4RuW?EMT^c!N`? z%d_I~m{#{~nt6zc%lIFNiSK4VP!~j*ioQWV!3+6n!WA@O6EVhEU8QOlqpjA`R?6@( z_#koXE{aqk>>Thy?KeZrW|m%#xt z=h&RTg>>8E{~4R`?ENe=^@P_NFm*r!Qfmw1RI=nDfxLMk2QPiNvQhKt(;k*!_MpR! zrxI%|c6T(Yu|jLdR{B3uUS-C`C^pF>OYM&6fcy}1HxLohqlM?N?#NPW(TU-^2Lzul zw=Lu-4N;BKmi;^S3(H1J{k&aVkLJbIcs;q{@$4Caq)h+W>AswNKR#aL;mYk6LET3m zd0cQXNUb(g>BgYSv1@WoR~&2O9T%b*G5KXFvYK3GR)k^-^_$MwuukXjUuJ~aM;EWN z(uBC2uqutVmEHIwY|2u?Y!CWMT>dqZ)y}bC+qtd~J44DbWilP2-Q+-GvV)7==!2to z<$7q&H=_p+ViaYxY_iU1oiKHcN<)&7khxC9p>lyawKT%H8iFh%>^?uwnY0=BavvRa z$JwLi&Khn;n;ie-e_3e=2{4c*b1S6u^N{aKAR`Zoz1Re;UjT}fdN)Jo0*hUed9myM z5*dtoR`HhVxM4Hz2>0cGd*^ry3E!+pP=%SAGUFOhq&KP+Q-)_veNhp(2p zT5n9$!1Fs&B0l;LB>7s-cEqnUrjCtsBmmM)26d;3k!12?{GtTM6i@SQE~WTi>l5TMH?@PE3G9<)hA|F*DbXRA7)+IOj?uL=sfU39kN zXL^LGs9r8hPB`%rJ1yVU#x9-)TWkMj#UMSSzkTC@FDYeO@Tp|u!2%PmaOH}q<2&3d zgF2ib`~5BF`ahR(7jUf1&IT5`k5XP=r!`_NaYTMzme)~h6u>gf$r_ySVQW8dF6_v8 zqiI}YcZ2m{gX-I8#raLRL2J+IYZo8z zOw>~*2D#lNte3_6+n5w}#(Y4L;v&|~L6W8<5(1G}R?r%bR+3X|Dm2zMMZDD%hqF04 z&j$YbP8hxkI-#YUnwciG2=Mk}sARy^Vwd{wyWG2;>!R250(mJ4GmNU*n)tl9^|Msl ztr{iZ#5W#;x^rNcZnGGJD(D}MMr_Nq$}nxVNV=wkw@>q{1SvLN%`I@KFxebB?oJj* zP7#djQb(v4y;QLoVji+jldo8iGPw+lh#pbUK79O8M{iC3$%-0s(!Mq_1EfN{nn8Dh%;;65>Mx~^h4<1>GpN1_& z$_N;_hEL`rA&0De`CK4oe#HLkA?t@fX_msLu{mFz?Zp<@#b&AV4D1$GSC)qyMFC;J z@ty&DV|F;$xByz0E*8C2%Ld*IP0^2fgP#BB^@$a6CQGcom^(A|XjafgN#u*2_W(QG zURBp6{dVlPszT~QVep-BLtYBA?hHAHzXd13#qFgvpvNEuqzxr@lb093=7@c47k|@E z@~(Tg=*WwT%BI3?jpw6!4Fq&xr*a}6$$!Wa)X7E4*4U1)U0m+|`0u{sxzva6XZ zoUoO!bTln5WT_%lJUqVdOK@<^mb((pqS38E;-7m`pd1jlJckt;xu#Hs6S-*L_4{s` z@W^zdSsfmnr}QfFrhv2jcUlyMXIoqD_;uNv1o;dNf~#M<5?;SXne8ncowba+HpN4F zEID36LQ3pAPki#Vv2%Dor0lLFCG-Bcr`0@B^XwcRb&Qf*;D2XIyt_>;9F~HjEml?R zf;U*Af=(E4EqZ{=taiJ`f!>i>E~sAL$EV+31o{}GO!+!RM@(tF1%DX%`PE9isCYVp zhT(+>?`4`0OI>9kzH0OnHyXZ1GU?#axo+KjgC9SBY#lY#H2~rPYE3-6+K&=DOd`zw zm9A8|72{t79Vh&sp65(q;+2h{KYbVn|K28tj}iBr1?DgjOG~9YYL1;JsK>6xP0jxQ zr5+YlX&5S?*5NiYrtIqKQUr8v3kJ>1FLS@NM{Rd`P?T(POM2Q zCh%at`mn43^YgX#v25oc3uw-QrqydqeZwCC=m=W4K}HzOLkE8@6i#-(r(bpJEyM&V zQ{XMV&uMO`;pI4?uD!-OKN$ZEzY?mVUJb_uZOg8gbv+^_;oXUh%@2>wZwa^(Q>is zcPMdvQ;!YmUn|n;%q~@s296J7TG(j1d^jcBG=_hrGoFd4!JMC5{{kizlcA@!)!X#M za^hlzgr?=V3+V>7iCO}ACg@W2fq^Y>fTlgS9(c{xB+Tn~@2atd2HotF)&THQ;tFLA3x z%FRCEt>-%fq6{kb6sviu;Z{z&{9QMk@%G1$%^kTD>iHs1}ehI7gzrdTRe+8|q z2?;|Xu_2aQ+We~4CGg}UbYzMk;Q+#PdRjXjR@PcOxoR2&J@2k|9i8r2Umh-U-C`~K z{{keFLHTjTAdo}B%uN-w%wuS7&PT3XzMiwr?Z_vkJL;Bl#W45xX7z?KODs8EMzdMS zHrB(~^MlxB8NB9vkJc2+NWtG1iLdt=EoF#Qeb0J965yL31^2^65a3>5o?~u+xlHyUxXMAFEMVw_J8F&;YC?*2}m-5 zN(6jzjE3lnAC8QGu!0i%{%ZidTK8uvqu-Upf|r$Yd@mc<#%fp4TufJ23JL-nxbJaw za+2Ez@1b+@*l3-2-S-M&iYxGI-5 zGISVl%y~^~_5ax&>cZ*SJ$0e*1BO5H3BTq3H@g~3Fg zD`O&z@fJ1%ulg9&%}AUGMy)2OJnTNy&U$ed-B$6^sK9QM->CYTQDlUqwv&8dj7hoW z*LAP@~h7SL`Q>O-Bv; zZo(T!>XK@=Uet+$!DS-gZ}*SxZe>Me{yg6LYf*a%G>yKcQyxtkNu0qgWjzzZ#-s0n z!r9dN14#3gZHPr9oc#HZy$GmM0RGS#T;}nDMlJFV1ly*}6r_Jb;y=fa=PR#iCw!Gx zyS6t@6>m0=7x0pkiIsI3-%#Uj!E;o|2ALYj^nNY0KomoJN%4BE|5N;rwVW0kuldzr3A zA++=@Ukm0qd`aB*LQ)}WGC)4EUCyhmJQJ|zbGXH*#qe9@} zgzv^KCCWCGRWcO1B1Ml=HMRE|paATH>-xXymSF@ zZj=5`;-u4w!NJxJakEO=6aXZCFd=<4!WQ*#JVIFJyuF%3SdKhL$~vlSE<3OCBEO5Q z==-9qQvS}d?)7tx$2~7p(~6q04+*Zw72uI38qKV-X`qMrvJ4AAgP!o-1vytL=sS-( zzgfLGpe^7vDzCxHGQY3YI0_~2tezSv61pj@AF8XX(-k?T{e8~Cc}4+u5+xH8uw2G~ zhTYBThm{hh5JeEBH5x(57BGj_m8#9C`(Rv9vkG%fbni@GaUmh?H<4Jq1Id8VjRC5UfnCP_?c8yL_6v&Z80!ej2oYw!57G0DZ0 zaCN?#HtC}$@De~uiwo{k%Whp8E9))7zJ6D#7n=C>PHzxLa=<;GlthF4j^xK<8R7ml|#rM^*e z!yqIE%AX=L8|V^3M@bg|xZl$JQzhG3hU@h`sr3U0{LSoXX(j4s&~dt@B5xCFp-qw8 zMVQR5`CO8JdH#ht2MzMHxGI12k74jjbgD2E>fDFlw~V-M2Fq{$si zX446y)CP4P?r^9fTsq(fZZy8@DFN$1df5+!R7Ea+e_YU852#c78Mf5B`GaI+OjH!z z@g2)W(ds=Ch+p_s9hYh}`Ia#K1AlEg`&lIP+`YAPbIYLDJr72jwKCZJpF z@a+umz2~OgQ}yvIw-*CHF#~;|R2Cag1Rta?Z7oXFZrac;21Xn=u%SWMLQ!yrUttCl zVk8+u7?8A}+9Bz=pRKo9Q!aA$L=D)k4%oE?Et~N$H*rrhLI7N(@PqOXlt%|=AEzN~ zRfQRO!;Yowp0!Y&Xpn@qyHp|FH-vBt$=wKhL)iAgnff?Pzi;ua>*|mYLfRmew2mE_ZVWP)nq$?THsEAe^`< zxgHRw8OZFQYFk?SuP%TST`903>~@h^j7bfVh8=?z(?s^fE)4W4%I6MRK>@*(X}&=$ zU@{ z4d@7sq5q|qPkZaVS_-RpL;a@^uG zz0#ws)6o;%;BQ#PTYODAMEN3H-A+af0+x8Vpb&VhK3BD|;ec5Mp_`==Ge`jbpF6Dd zcUVXAMQt)Ctk8tl*xB{m`iYfpa!je9<4{eeZzdkV}DIzZsP5AFp?a4h)!X( z8?M?4T*1}$+KVu{{sOTM$kf*V2rAbP&1(lA(%_}1r{fLgXd>B8w}|9VQ+=k0LDPqa zUCKh7=kuy@0*b|Ddvj6W_&udZeiw9r#p0f5{P?&~oUDwNGr>pjR3UQD$v~tD7DFOOdkZVyl<`ChOSb zV^%S!{N3hjWzAIclor(Po&-`NpOVhg$L?0 z3)?U9G6^!g(Px9KOSGX!%(`$AgHXiN&v51h)fT6ck1va;I5vB;b`piVfWe#D5s`C=I#*PDP39 zdc@w&>r)X3n28?S+1Ws`R8U#MUeGXG(vrS<^)PEebNxEVnE-!RzM+pwRiAFDiIMld zk>wH^K@prmuS%mEB`p2xoPR*`WcR7^;jis27CxgndKd2Pis3qBq9KhhaXWBQ@eIPY zmhj7ANlP7AoZZ2S*}eBga6xJhcnl6xRwW+`G3+@_dzjelS9VW+UxE?uztSLUoSOEZ ze_ElJ_aulf5ZLo$TM*8BedzMDh{UgAw(Jl0`?6*6kXkp&&3~dqs?gp$i|jg^ylc zY-(&r9$w{5>N1MXdqx(^^kVgU5pw%);_N)B1zj5Fis1jb(dUA-RU&Fyr3aDWG-nsG z7_(;dYGdgsQloN9m_048j*+}j9+gh3EWBG}r)y;k+ZoA_Mz7q;WitEd0?sx3&is|~_5vtm4 z*?j*Y=U;ILm|{?uM<12ZcWa^Q{L~7l^>S&uYkvfb>j&SZu*vEVu8AY{17UQsFz}abFZ-ttI%LES+&xd6#JgKEdfBZ@7_*S@kOP1`5ri1%^Gij)If>X7`xR8JE$4YgJi$V z+^A@M)Qewq)kgAdr3d?a_6!Yg4lMYb^H_C8t#sx@Y2DRQJjvn{d*Q1 zb*(oeOYECp6)W(!(b_Gu=T1)z3oZUNTDBlB>$*|l?3ytM`6vFAt4nEA zkWymu$1nlodwiySF$Yjmv#hcj(;~4z7TSs7NxEMahOcn@+0)gPtzHVIt(~uo6I+&o zr;U|bDO!Lc70&3`vTGGC9kENNxRH>u zxm>*=M&LiPaoK{JHnBE=AETFekKKG_V4%cv4o@8Dq$rN2Aar+pY^*}S_SL)Sj#_PP z9_do!!XR}sJWHrLpIU7Li)?c?UoHnb`#D(S01!@4lU@wOH9&y&6g1RV0RegN;K9^0 z)0Kf5xc#D|P2BS1ntGnkD=NvSCVG69n0qofnl7a3y&v>E{@9=&X_rGZ(TtU!ZC_TJ z{A_Sb(QlK7j8T#XOgZ10G%MYk-RxKGuGB30yb z65`nClEs`!q+rM4)RJ=s2O;Q4aUPZ8;>~wp!J=eiLtwGKuM)WcQ^t& zPqto1pqEdIH{nYYV+^$~LpFR?zDIH>US0W%@q((N6A zoX=x7k6V5?d*pe4wR909we>51X}1|nS7qT|hy9)|F&iGByz-Lblg6v+FN4!JImBd% z83GS8#?aGs?3D3ZQQ`hUkw_P0pCCx@)2b>xs(DGkkT$(E^WxEn%njM~_p+xR*U1=(VwBE<2k%Kapj#&imMi2=;)@#6t!yPyLtrTXLnF062%KRnyp-=zgkgVSsP`@JXk|L4a zCCNfA!Llb7uRn5_wp#QrUtAE;_>8M~p;m8*<$y{{or6}0VNUNR?e{)uw;$K3xgQJ3 zH!5(3x2=bayL9xoqSKL2#F6X5reZV`-okfWxH3uO@X33BcJ6l5v#FynM*$`$QeX7s z8w*QGDpV_594>D>?$d{UEHJ8(5fBi7t&cLzB{9?;U$9$16TWi3Us!>z$m4nadsR_C zJ+$44xHh>4Mwve}O@hE&B?X><7cEmd=bk;0o%5*i z;ie_|F<1EOUBb@`2aO|Lk7^84#yuJgr~{J94X*8WQS3|5<{PXe@`n>?wjZI&E1kPK zHu4|~0G3i^FyH^v)x}PXVTKY~&q-CCerLS(PWRqY; zSyaEJhIz7%egw^eSb?M@zti3;Uf({L8G%!n3tM)BmH3d1IqVsiMoY6**0?BPyaa`! z>h6SXEAVqeMeaL&=1Qt*4PAnOBykJS$(o=;C$Acn<9+*H*n#l01CO-6w4pI`^WlYzP2!kfIjVZ>!-H znqb}psg?jEN3KH&%(kV-qf-Czs&&Su(;b$MGL?^jSx!tAk(t(hK)%=R2$94Gr+4iKwq)Pihn}>XgU&ke82})c#txGkE5Lba(X4@TR zQW&Yh`S;ZaESL;{pBBeO)}o`9`yp2cs+dJ^eHK!wJxpn!D94o^LR`qjZU3+#CCLRq z$iH$8l+LF%Vvl!aeeIO_@9am3nBF=4b)tncJr-3Ls9$__cuj)opZdD*<@S=^VvjK0 z>ImW@j91Uls@0W1tLD`L$5nUCrG4V1oET*$7!eAz`uSh<3*K6HAf3J=P-&{!pR7D_{Qk;U~D@QR4SSg3q@f%k!AVRr0m^Ki`Z&n)gFcU-k8p>nW#(ADr3U@28LFhUZUs ze$B|Yr>C!mK;i@b6p-M5x}AY*00sXOb(;!;6-=Z0kD^vQYYh`^DmVoNsT%y#4jFQO zT%Y>go{-c0=IE`Uv-Ql`qsGIj7uozqS>@l4x}~}pMVPzkgv)h3aJg7`A@vqhiUBEf z@t5VA*QrmNveg;mcjmaOcSfv1vSWPK-+4t8b8T((IQwdGUEHv};M{~eASC(I_knW7 z{!Ke0!^0&fH*`%yvFOFJF|rt?Fvwp(+Lp=Z53`#Tw)ZRgH;nkG#%*eLq&y7uA7GZW zMZPWmZP}%5E1yz_D@-HZSV0$e(#rm_MUjTQO3#x!A2Yt(&`*E1T>cQV`%eVAt3LAB zR?H9a8SRs*bWQ$&rVMBAVFQ-BnC-NVB*tAZXyk^>E{Ugw3tcWg9;0hDwdnq_*i0ws z30FeWVFeZiJnJFy@e0#St$wi713@>3f%e48N1tlQ94kziUEU_eG8)i>?=aUHTK2Z0 zN!V}}K9zXJ8_^M6_TtvVIS=#74P&*RD~~8EF1%@Z_n10ug;pq;EGeAvEdb{iZe0nxA(*Km<}eGKj_^)mx==jn^l< z0#hV3XLk2jOV@tCI`iS z_~;U!0^@4D_xA}Nl#%2-rkU`lk|;ywF&gNw=w{?M60;_Dx<;yYO{=B}GrAtnU&72g z4?KuKAd+NT#g4?tUNS{Dy*j&n*ttWWt8-zCH(=+dj^*H=Ml`LQ7MI&kmQEdmpcTSC zfV7~Yw9j6vn-;eL*Ld83OJ84F3FK?_jJT2YSrJ=%?)f)A=W&d3Wk9KU0Leu?tbN`@ z1j?p3^2A}orXT&-Ss58;W94jxgx3puytyV^_-|tJtozYPj^Z#AN2=Y6dhzmGP&Odr~ zWGlAfDFrU3!%Oeg2mqvm-XT~YK*kOKK;DZy5Lx*K3fX$>aNaV;6N2g*=b`*lT`jR$ zfx%#cMq;B})5y2QJ@5KH`ee6DvN?@&q3(u&t|21L_pEWc-okCe6Gp*%H@HYHWt@^J zpFcZxE5e^iWb5&ILpf5hXU9!_Uji{MNE225{ncc<64!5ezU7aZ8g|LTZsbAZXH{I} zcTS~qn+d8>k-By-#^)kWt66nB1}$pYpZ$|AQxsvFOZZ`y&e-{!w=3qL?iUAgJL*H0 zk>kFvQR&o;6kR=AJ{o5I$By$&H_o{if%aKbd~z=JQo0Ve+n}a+3-lb(aD+hee_5|= zoLyQVU0u*Ax$1s>46od8OQcx5Pe7C0rRQ}X?v^8UzMw)Ywd)0$rH;6uT@N!z9sD{$ z_Rw}Sp$mD0a($vG1~kfci$$`$NF83)I6i`FCoRMG&gsF_s)EHzBHL6aX^`2|;7ID8 zSt-*DHV#vx>!zX8Z6}0*B7uE!IcE;>@_*#3d2?jcgL_gUko4$|Z%ik)#?c7pTTCx? zReT*~`q+LeKKdHbO6@D{D_O~X$~!IWCIoCi$KzZ0i(_wR@*K09hULjusWCjL3-(81mD9=O)0 zF#SdmADiane7y_L-#%lRWeGOpZL!gI?PNP|==>i`Aa0a)8WY0h$P{1o0kZa! zLTA^tU@;CD%)TtSM<4)tCufNH>EKo^<5p|t_IyJAjI2FeXC$g|c-ft(zGt1--16cH zM&XPhwv(n~R$*aZ#%a@7$dPzh( zt=N^zD#l5?2`q{7J~~8!pIK`aSVXcJ^9qKdi((@I3~+u;cgW$l6#QGULI2V|zsr@| z@d6JuxJX!KPo&$}i1@B*(L_CnGqM`UyN}lXl!v_hL27HmE*{JvknTdev%jR~Q8VFM z{@$=)m+97fxBPHyfI2_U}19B zOT~8q+fkB9uW@LqzWE_6Uk)aqYE{>jJ6h`EB;zM?v;**ZO6@Mr5O(Mmd7Njg?JUHd!Vd*PMq~kCKu;|6`oqv1eAKs_fE2VW2BYJNfK- ziWjPG?YhpyqVdW*1@xP{=-17&+s*6lX`}I+_k!|fb@5eEp9p%>E%;GQRfCs%yenZq zq7e~yDqwjp?e^D5+#kWO(M0L0VUvcq2P4=Moew0zK?20HDi>UKu(PbUPmlL+F-vmR zpIiI3kTaWO8ta@ahR0gs!slC|A~KIQZyaErj!Td~oVl&q(R+Tzt*8=DQ*K3^V_g zU(mYmVpA{1Q}x-ivg!SS{YXTQOB9LIzewO2DOlOGPD~AcOJQ&#k*!|Frc6~*i1RSk z>+65?xz3dDKdB^HkX;8SJ#G!ot+?;##L|=I%W9q!Om=2mGAX@LhZQvykv;d&p|Ce( zd3nvdZhsTU_TvZ^;H59q#br+_7v7uoJXbJX&N`+$+xN#x< zsiRf(BJ~rIIl+9l8f_jy;vG9~7ept2)4aBJ^o`s0H^na0YNae8Y0$H{!`sDYsq+D6 zW#jzyieBt5%&3SD4V{LGTP7vdmqpdS*}*Hw?~y1A?K4vCo?yLW2P&^m&UL)TJ5?kT zyT-&pNB4+b0>51Fkui+z{9M?!XYmc~$)BwkGc;r{Ge>5hLC)}g6X|q&KU?zd22l><^eLyP403<%4{vFD8*O=LUp<^ki)T3H4d`& z6$;7kyzMknZ*c??*tp(T(9u!rS8LnP&MUwx5|UlPOYFMr88@-9WdE9_w=lnD6Z97y z2kjsKj>e>&NCtDacP5)ykSP8K0w`B_KT6MnUy4T6cadn%GOmOFHlrWrA>=C@nB7Q;b#PVL&k$e%$Ma>C;C6TX# zhi5G=q`E(Jm66L5qT}qQ5c@H3ar{*A+Us%$^>KhTad{S`bUc*5upnP;38#>aCSnWd zD_+XzUl#P304IZJ<6vhEP0rP^FaE1ciu-1yNToKi zXzKg;mP9JwrXJ!$Qxw`G?VrCae2Gjwh945KL1fcZjycieb`J4asU`$}Y=lSV7Am;G zl!e0U&sBFn1k7mR5a43@>!ToiN_T%OrVH;>2JiM^=BMp3H9|a zkuytNmA$M7&a;B{^`Zrg?*(CT6PvQJ3t1JuarW_a^X(C-vR`lilQ34*ghk@=U@usq zILN5;ncYu1?&hn%KrV+(qF!*k3=8dAk3>R&iFZ`l@2Bk}*qh(Ze8WW)3Yk;t=VfMSuaj0OMV=68d*)C)#+I-r5Pba1yt^vvelPvG(vtOyvKr#} z`3N`3K#Pn10)BHYX*L<(w>=FEvK6kqm#0Z23p~90<3T^VybNcYq~kZ|A)kfPU?e0| zwOaw5WC_9x&==vd021B|REi!t>-Ot}p0ppimmhPhJyp{kG{%qneLiuJAX_8miWk`% zn>YQ^+2Vw@M_-Fe6;8H<);A}m=Tic$$yG7ywu`u8&#=+unIgW) zC|{$*d+54?u8+^0d{;i3xRb~pyI+_(96cY`K9FN()>cQiK3QiZ5N@?*eCAveeBk9; zP*;mf9~2g*!G#h=8FP;P24GA`NC=wcHjR#>0dv@BRoB&j$Qd1_UVxAf^tz!IM zZR_Y5qIdZQka%9dA1n>#BCdk1@Pr=>D}r#fHIhW`yFpEL0~TcelyEHgZ(eqhv48+e zFedmR9^yg)?jc*F-aP6&P;sDc6{ElV;N5=0xb!0bklHKYzJZKFyJ1|KO z+%DDB*~7`Y1-@jupUSA-PMv+@_bdMmAEn|aJWH>fRld2UAu)QvkhcQ>@Z`>y2A z2xmzpo8Jr&pIloSb=HiLQuFhZTIflIY&z~M@hY3pWzqs(VgzV|FgMsGQ?(#Fkc2Tz z1^9|^2&{7-EoiJ&3Ta~-n zo1_%MN`DH|)9*5`l$hPP_Q|z0w;gmC?HPQ7a+Pvl-ssD960K5@^w4;H0iXn;6kz{j zMRd9@lj12UD_1yh(WU@|L2h%jBh3EBHXZzIyCO%cFNzy_W29Bx0>sc}yt-V(I~z{v z#@fQxFM?ZKcb59mI*G5<=OnoHhJyFNn$Z7{F z>-Fppav=SnoCWh`QZf@?o^75h6 z+tMjKORQ3!7h#V<>%&uwaRxM^RxP%-GcpYX?(li1A zmha$h`jWG+{9sLLDAz^BYk<>$%UR*Ugx}*m27<)fJA4mA1F)zl>=u&ZHIz8x6OpHX z{rZpeBjma_$E{l=kE&eSd*#kvg4mBzB}@01k~Rk{&mtmNS9&r$kig)8wW!dyUC(|k z6q#`*e&FexEJJVou^24f`=r5B!%s{fKXR8-TK6#r#8o}+ZV}BZ`~4iEe(?2%Qma}N zd_d-?%k}Bbb0M4`9e0!)SGlm52kt(2$t13oGR#p3`SSn-BCDo@;Iw zQTjMRCmY+*l`bD%`ZjK%lZ_6EIX=zKld5)`ZDUbR#P6BVahj5q7|&m+ylaD$(Xd!U z6+I{{+H(Imp9$W0{Lcj(gwWP@72Mq(*{sx0Y?FhB0eB08ICg4_po1G?E)&t6to~&1 zIYGkS&MTYFSN|rMF}c>Gx-a2`UVEF<6i;6`SFB)sOM=gWT6#pUi#+>E&VP23MRK1L zHE`d=R6r%Zt_Xol$`#s*T2uPM`F)X&it1q8Edc++NxcSTa=(A%4Au#!JLF;#cQI{V z=k~7+IytoZk-!cFnBW~Ni4CTpw5yelXSaSGJ8@P%aH46u>0v5ohKP7Z^EzcF_-*1F z?#|ZdG1Uv=rzZmcLyO^7KS@ajh@RLiL92ou$$N7Q0a@q(OJ=~7-oYtMEga@L8Ni9V z1UGNqyyo*02Emnq8xlYdjFvk<^EZIhQ+!pCjqq2@E&c2v>oBmP5N z%BqdeuFJ$hlQgFJ1JMPHLqm=gDlZ~zbS!p!jJiVpQDs^7uvfcxWh37aR%lL?&^$|y zC+La@NxX!H8GIaMpijmr%WvLTveS{z#T54R8gHWhQER{$sTw)TUZa! zHI9#+Z$3MjKFhF>Lv6C9nDSvpZ4hwA7gqcXc8F-Vrur30xq0_I9%os0r;FV zrSv1n6#n(=7x{rN?7%QjO=a`5G^DPh{oe}Meb|x={#OH)YLYqY@!ai8A9>dD(BBo0 z8Uauv@$quQ`}|)VpM!G*yP9&u~o|Lt3fRjm|BV}WO;w?7ioNE(J2SH6*BSR+> zuir;bxN|XjnLX2{3X+-N(OT9)w{~VBWN&F<`~cHI@&(vu&H2u~R>i}E37QZOck#o_ z*&&}v5l#pQ5ynMXIzdm_s@$Q(w^mgJg)j?_Ug2)rGIo##zz52r7k%+d87Z4eR{xPP ziy3zGR9^0SdsqE`!j`9j5!!z;|)L$IS&@gVwj>J*ygs&g+JT*=yvwSFXP) zavrejW8A`AW}6MAYIO)1I++tqtqpx}>m>LUF4hSW{tiwWvhEzM0Wc61q+jk6-9P0eyXaee_y3G$)U+D@T9k=36l6#}Bd0felahDc@=! z1NnqUh%yBgXfz$eErn(AEMd?AJe4}?CeRu$aSxzseY*hc*Q(z(>SJ^Pj}Cb&-?_+# zr;5{0{(L&y(~|no0WTz({+;E~XMOR0TnNiTHxgEmI53b?gG8Yf`aC0WnSXhCfsYvC z>;lSjWQ1k+HYVfp^>eL3FBmkQgUcZXJXbCIyQZ)#dUm!hK>W=x#L2>d1e@-+!C1D} zQnNN-CW7N1msk$acGUB~3kN5rLAxq!JDY_&tZd@qvzhUAx-Rkc=i$y*j+A!~7r5?n zu_O0Y=eM9T(1*j3UrGD`oBpc*K?FtViPw>phtlwykg{%geuu%y%M5p4lKst7-(VrK z<H@($1qLmFgJ+Olf z1s{G(y#;FaU@=V+Q)_7#6Z(&BF-eATH zYzRiKHUC2394=8LT9*|evK`k$2Z1}J+c4GHF;Ramcdiq=Q63KbArRMWCk0#kLE zbnE#0tTg84T?1_O+#7W~Jh;mNR%P0PnHK8Ql@iWCqM4bKLx@w9z`S3#1)|g$Z%}3v zp0a+%YxKR|+i4Z!w4ZR_4Pu$Jc)?@z~sN_7n7>kHy$fR8=r(XB*y$EORv z$J6yn5WG-5**tA%Wb?bJZeuzVXfcR3c%9Nu%4xG?t*&5A5_A}3(^vnYRrR56s5qUL zd*+jcNQHdIimmx65zK=O! zArGenKxmjDA)pB|^5Y?_-D;xR{mLER60At-jq}~uXpul7@`%admjkn0K_eFqpUe1e zT~*Qi7{+nrgPfqno?Qgr%wk%wtlRf}0_bkQbWSzlH-CGWoAmA`B)D`hlqA-AcCxYw zx)Y;yl8t|9>U_Dx{*j?3G<9QWTNdB%y@N&+EM0_xJnx;rl0i?}yvnUAe~l zdY|Wc9IxXzp08|^dlA#AADk5zdGVF#Yt@eaEwRA#XY18quc9Z@t6EJHGM;3K;HJ+w z+r1f~4gnf_tRrY1%~pMMw`19&!ry6}QNCG0feI;qcTQXN(ap>1UtU*ezH!Xv%U$gs zbKdZH8k^Ms{JlRs6uAg$d!X{}I4XHHvml9#fjpy;D2;ZIoD3EWh(+2TpJ4Cy{whe_ zn}n(%t}-f%V;k^GP;scrVqxk*(3G@I?2VIujFHI~s&W>>W70_i=FWJN9bIqitK@Bu z+eTvR?1CBwf;2_P;xHyOfWZL=4-oRJJUAm6Omhy-uEmic8I1m0ydgFW3L)~+rAbAW z=B59H+T~jyXQJ;m*(Y|1?eN_eK`S)=7yWu6&G=}8@m+?PrBEGg3W-|=wThANCZ>aM zZ#j7&s$;`t@qO^o6^_hYYCECmY3053y{e5~ummZ2`36uOqrRs4vgKCJZ%0l+xcyWM zUBC(g{x%*NO{|<{?D3zGou3;C7yt___?R4p3|#jknX5lC|BDYm40fUhK)?mMlhs^z z+hy3_wWlSblL7E|G9ZIYkOi36?kQ+Ty|L@puaA~zbpWpX*~^#Q;q)bg_i}1M9uOTo zPHrR7?HaIEF9VfY*sXF-5tx|Qt*xH~;VC-RA1yx$t5~1YHR#m(PU>&fTeyOT(AblG9Q?-O+y>U+V7gPPd^n5nUHZja;gLs6&tyPN7*ObL? zqvo}9td`5GKXUy>k3kbc0Kw?{E~KXA_N`e)MWfX$RFvQb2zW?~&q~aHmE-zi%kDvC zpa#-1f>#t3kW>yw+%bdkupC+A{62nJ&fGnd`R7(fx{ z1U&89cB2qAl?yR5{%hjDNiH0*$59Ig=q>`9U39oYYl#J+FxEx$*<-3;YUs$qhr20z zgNy%uNg^A~$=k)ABh~~$Vq{d-H>``Y9r&iM9=N5)?xg%AKxe|hy3zBELs&Xw``)PE z=XC}udg=!*mU3Y-`RH&fv`_Buvqv_;WJ4>k^h90XU1^L#=O*RGRDFDGS7%EJgjog< zwHH!SVlk>*<*XQOtbZ6LJ%Avi88#NeA_2N3zmdRgfl|M&uI|b-byHK*r^=l8A@xPtUxP1zM!ouD_+;b zi5zSnUAF|k1I6ZxQys|q5o&e%NIylc?xiOL&EByFVRqk89~ra~M&2HncC*B}@qBDv z?QO-wGV^d-`fWpyJtZwKf&5U=ZK@Ld=Wr+S<0!}o24Z$l$n=3l7#;>wfi^FcS-ZWq zgN^eVC&lQTezb@pAk`!?=pKkyoo2>_*~(8(bb5j`Yzwz$j88@OYz;cgh4-;)tL^f* zA3dz6FB|#sQ!Zf0_lE3ogsj&#A6t$V0yr>td#xjm1~3NOJ&(#BeA}ZJeNAlUbcF3& zYoqh*ehu+wWL?l4$I0N}L?>?(|o zEh)B)!vmYk@UB1y6UBXM)E4{L?aWNyTo)pGYBULkr>HqEq2Lp!txdl1C&NSvR$9!l z+94PKaI4xamxwad%J1hZB21l(jC=%Yv<*UcKK=c+<>;wx7=l89C#Bz*c(suj60XoO zNp2OulQW^?k4(~wxOMs-(%s{HPO$+{%HDhrk8XTsr0<3_Z3L4+>_w<@s9T@?peF15 zBbl=5hUA95W5aQAM_zD76peD|6@|tBb887mnUYuTy`^=0_%8fBTU!2jKa8eqm_phd zc|JwOpZk4II8(e(wiZSRy8HIkq%F*zpgcvU5Cv8MLw+On|tjPMDc z+<0#C+P^jvcsqp*BwSN+6M~C!EFg+*-F@;)ccq^^$Ml?K;eH+d{X-k@*W|YB-Ik9{ z>x7|}$5i9?7fzwYvaj|dp8UT|^k)vaT#fvh(eya~261khc*h zkMtxZB{6=jE$+AP@#|@Dcs|T5ae0pbT;DU4xm%E6=AqbYVrI5ZT$~Y?HstwHPRL!o z=6k&M1--aey`Y4%^h^PvDG(jD(`%3(rrEW7cGuWAxgMeJ61`e& zZWdCm=EjpY_zq#oNfHQ?1o`35)?aLBHK3zs>iyP|fmLt0EFfS~L=x$Z*Ppz2{a#=L z{S{c6yox`rY-Ke$Xos<&YlNOV?JHr06ft-}_HeVk=(o?Ro24W#t=JiPAs~)FXI1184@gKwdxgaZR^|5tT#E@vm zjy1r3uuONQZlJ}Cj15F0kEnhPa}v_95k8{73ADlX0+%Guj(y5xm=FPk{p*{%A+_mP zTMKb=a#{!yp#@wocSM5T!WpucE&SVVs`_TJbzD#dafNcTM2nLC<)&b(E zve)QMkrCX0L6Ar@Q;jO>a!4(ZOv^!)0|Rq(dMI}tt_yin9`CKfaXr}(@O5-_5T>() zesaWcXJH0r_Ana4=9@s{$a^ma+!p|5u|@0_oU)^uBkS60e&0Y<-o9U6JG(ieI*02) zZZ8|a2y#%{U?pR&iBugfC1Wu#vi(mKnhL%0!2^K`xI%C{H%4KI#~S4(?7k5NPy)++ z4SukJ=#2>WVsf&K7mcSOw0M<5ys{hj$(M(M6SnLW*~c)4w)_5$jn|iq#BpVbaLE+z z_@{Fi({oyWemj}i1ehth`}b?X0F`2ck{^YFL3>09aHy*KgKOWal2;5b6Rl8PSJw|M za&UvRJpBqC7TAh-?!nl-);ORpes! z2+`8WBTdnu1KFCkw&^1BkZ!5e>W}8*J}R(T14^G^OhLT$p&S9GV>FGGLa_a)6fGVW zWsi5NPJdhH{IP^5e&;V{%5RBQrJIncvpZWKOCcJ7*D|klw5S27pKU4Y6!3Tf7VwV)X#YL{*t%!t`>l=PF z{xKgf)s&gG5!D?KOYeXxd_xG_wL2VZ$IyYYVGIL!?SG3>LCr}I{0 z`wV2S+`PP>VzW3JTGb>457B;~&1j`RWiBhxt|7y?=lQoV!KBLIx>hmOHo2;V5@1Gg z9xUspz^q|O_IRtW7;bvUe13RU2bVpx9K7{zaHH#sJ6STaylI@T>uS?0?s9t5cG0ru z_H9LfU#zk`o36hy_deBbSclbXZqBFuM|GkbElcDUpiPKq-arJc^HYCZ8f2y7kc>PV zeNj1nVXsbe=v;_a*J5EbCdh_#IP+#EQwxqu|6-pF4)Hz9AXq=Wee9T^KAPX8UM%>= zT<&a*iewQu5&Wp4X~b7tNW9_KlAn9IzHc_>LD<@z3%og4#W=r2e-_D^`VprDby~hm zJ6rqhj(UArIIzjXuD4n{I=4cpZ(-h)F5~%dEP=RyT{P7kFdqV4*9Mz<(fst#*sn(U zLZ|u$bZ-m}XCebCtC=hcL!%l3BmvWmH%46Y)fdl|+PMBo%YS1x{+Exyi#@-^utTvR z&gmd?q$e!&5$`rdQ z+UjuSSiM}ul-=$oU~@yxXz<=@<>waoAg#=|x2V~pF-_QSG^n{PJ!}Wp_r6ljv8OI$ z-2=P!N(*{@i#+w?L(h*`YCTOtA@{41CVEC!2(Jo@w^oQSUQ%M$O%>QFRaQLlF_l}j zGohdX6oVL2U{cOP22+?lntr8`biy+?eg5)gNs8grNouD{A!#V?9!O43#-tz)F+w#A zZbzkn!+of$^k)eRmxSJ^keQho5tD+G<5p&k(vF3_pCjk_AjV+xbSqshjL(_H*K93( zYuBfGsSB_@|3AbvkJqAI3*Cd!71tjGux*o;B52EzO(YJ`toqw*i!5z>%_YuiH|rb8 z?v4q&F;8y7&CM->dxzl1AnDX?;5df*R`=SURV|0m#6KXIKJ_JEyb#viekH~rP_({# zcMC}~jviY3jwT^&gKR5y5@^j84)bcwK@8Ky>#>5LF0SCW2_LNl_4{hIP&0+%(2pWx z9sC~hkjp`dShb?>mB@F;ud6Jx9<;L>f81@7=-hzKw{C-=>+pwsf*B}Z_u84Af=!a= zQ#t%_=uY_de$rb>bv3)TeG?=7^rQwd*NdtA@gMHh^j~qkb4#L3*x%`Q_Gc?{T=COF zAS#=n3)>J=-tFq38pi5layWUAe0z;nEloF(qBaP6K0UfQ%r9|Hk6%HGs(J6|<%_4NwfSuT3p{n@Kf=FXg9F7V!?ksl6m6^R?%lll6{qk=9`D}vc zJhNo+IqwZx!a9W&J$U&;YYaPkD^EAT^yVUROW3sZ&(DmI|Hb9b7=6aBn^m!5*}+7S zN8hXRd@ho6#?0DV+_iG(>)^UHpu~0Xd7^X&K?&%H@%-L>Vy~P_g9%8^B?{FF%tCC2A8EPeG0;H48u11JXEsDYbw5q zclRfqhuz~6s0G4^735+BcbNL^(JY06Fa~+Wp1?#wuez(B5|!jyvWzs!9dAyJZEsJ_ zcgca;KOsV3I_9_k_9!ZJPvz0cnf0cH$yX}$AvHRA@|Qdz-5S{}Et(H`9d6NOZSfr%>Hg} zz%>5Ft5?NU8IdLudEe~FxviKatugbN9kcYo(gFR4O)>FzA8-H!sQ2nQy35q)gx62h|Z_f152;z65VuNpS~{bFxE zdX$maL{8VIj>Q#1Su){e&6eR0WZ<(pb5WU*LPlef1Lpts=Mny$T-j)KUSc^JEP_+e zO_7OAwYg=er{+z1VK2S5)hWT|L^3J*fo)X;RjK?Dx%g(5)G*J(9fs56-$NSZN@Z;5 z8s0;GCTdzl&64SMu~h@syNutc8LpY*gE5RwGAGBs8P$L7v%wRof6tb#4)9A~p4fdb z;<=J=O;_@P`}3YEzm|uoxZoXTVf+`eB^`Rz=|Efxt?6U-jmUL-aLD06eQ}ol6hm9& zk(;IqlYt5X7R&kj$kY%MyO0dqQtqroZ9BVL%AsI$MQQjyg7!qiSDJ4`2+B6~h#r&g zG0I{#g@^jaH8rH7gDq3yPz#SVo{dOLOIYhKcX&Dv{{oZ5Yob45lnO%LiiZw|+yGq<54U(5&<3ZqqeHm$5ga(KB z>t6{rC{Tt2YDH~#nz3GL8Aa!=JM;8`0Ky@n%!MLPr3SOv%6bL>>XuFh6|t z>{%d)vH_9^PogM`7X+n6L~MW7prU}F_Xi08i>yU2MyOrcwR?m6#!8_XHnV}(EfUHp z^PN*nLyR1HghdHYXJhymAcVYSVWq0z`O~rsn^4j3rX8E`>oEs4$igV3`Zwo4Kl;m8 zH3Z~(sUk%rzXvuPF(pE%==^yJ(OW_%a9enNzmtfqC_2&FXBp{i%{+7c-Ev_R+=;%& zpz-pv<6$*8Hp;STT`BNadGPu01Jf!JVEsZZ8J!N2P)M$AJ1wE;+#U#&6@er`{{8Xp zaE9X6t&tjQd3brFG&t@Q6`2bxzxVLr!%l7m3+YpM4K3GEktYuzyCV#WxxwfOryUVz z5^gHhaN4wAiv;(h_2#Z%lp$^5$J=e;r=y^PNv}U~8N+tnUbmHJ8})z8IY_hp z{JY^>`&><7-nAQ$kRKrk$~&&=hux^XGN4jfz=&8efwLY_;}6Im;(`rq8lqQiAR?*9 zsnUl(bySR$A2!(?ZAmt5ZJL11u}@I8?ikiSSv}0q$huAjb-O{8A`v$hEd|qQN z{}2Cg>`)9?eaiW7f2HJxmwc9;DalGZ`4^PrITrlW`BeR11@gpa_QNvsncl$&V=S61 z9@<5$E%}<@1#_bCN@JAzM zFhsz$*;cpKouKmrjoxeMK_T%X!@@wex|H~=VMGbmsP1492|_lag%63^S4d$LNU*6_ zZvMo>$9{HdjC8OOP~wU;iYu^&h(ca5)z30^hvPv;LJ4RgOu4fA8%EsX8oX;VHaXjH zKP=XaKgPa(0KF*}62$n9kPh^pQmUfq2-vkA+=`hj3B7|JZ6?be}8|4#g>I%q?xz( zHbu8?88*GgZ-proZvQ=+yG?Y;;v`S)7s{zh97Cz4xk z{+$?7iOVacYlh#~s&n+mx?DXF++)oXy((qY>^e?NkSHk>0=o{Z_9+C$|lrYBA9+|~M6Z6JTnPrt8J&uJ4y zmp^C)1VJ2cKKMqoH71^SolYFQ+yjww$23j(Em<}}C3MiWYE}o6zdOPKcx+zp3s{(N z_U-46S(D8hzJ&jS+Fk*Yq=_tsco`-P6%K5gcgEAk#v0V-IdJ;~PkldCYzbQfO*A&b z%N(A;HB!6IoOf4sB_OBPJHb4v)h$;$Uo+XE{$WPG)n${!|A)>F}Z9g^%<*lsgiKnLSW%GS07@s zFqce)zDo>2A=yGOK>MB$@q+<}8_C+(v6OrHcjQRA#_4`N*6ro@Gu7YEs7qZ{7rnSk z>M928$gI|4bq--Swo{bekYV5pXCMOKU8hegK!3&;CW7IM$rh$gcjth&#bd>$)&qP{ zb@9M>a@69QXDo%$#f3}|?I<`oS03R_K*&rc!7*<^ke3KK;skemnLK^SbanTD+57x? z1%fdEZw(n8bj*)3sKKo2lPBERVCb4N zt{$Qc^ECYkfiE_dnR4OEl~5!lfSdGXXQoyMEX*8%)2ztWtvonj$aEWV4#!_bt)4XH z!$?r)+&LAq(nTsho1~Eu^68%Vcm!uIB zeT>+l8Dz|#)FX|0ab<%Swr>)qLx2=CzNFDwGCqC)#hLyqrupN)Q8L16Mtu{e zv*#`4!Xd+`r|*Jew`aqp>1iM0_auC`4WA!J(*Zt;VfL)&{K-RaK-4L3JYZ3faxkZ@ z+vNmodZE=|iLT`13rEa@K~)h9wLyzQHB1|YB*YdMQ&Zy*-C#Gb#()#bNEkgyo6-n> zkds(~XQ@89MIF!&Ma6fAKasR~1nv)-s5imZa{vB$HQ%5F-oMbLx^L~t6F;C6{lm+} z%IfKAgX1}CK>TEL^Ea0VLk%~kZk&(`|8(J*(4j)psp`RRE;@`2M5elrUOcCF_k+~e zI{$26uMw2ZwRP30Q+&~+>%YrU-RMwn_B<*LByE_-EV2!jCsG^%(!of~TKwm@{T#ON zqe%1G_pKFlL|hvbYO>lMj64CE`=*K1Tz8e*A=Q?P*8YEw5$i93iN~lARNiXVU{?tR zAduNEr4KP%EfS;+Yy;iCBXu}V>uiJIpFo@_``yDMao?DlCKO6uO-x*h`DaYgLb0Nj z2w#5A02uU1k)bg!f?Plk<8D{@7zN^(U`e1{e|7x6W%1_T<~#c9YL4+aZaQVi-D^s-gE+WBg=PVI1r?`|%$ns#PRFsnOuz9tV)oc9w@}1LX7?ETNlNO8p zVoGk^F+}FXwoE1<9zkslR7y;T{Y;k0J;EM_l@xtNNY4kEzzOCPpqN02q%xECM#D^I z(_PG8XIk3!Spg@8XfoKp$qpuSib?wg*s>q&_e^>zSGM52j#uqSB%{H>-nv4^5MC9; z^NW_VSq&X|wjsStrx9J@2KC;V8n{nOec72Be~H8rjGJPWV}%8qpNNdwzDXlfrNk$j z<-^$Dvj^4q$jyJwYT-pNLX0)o2mBjdEx7I*ayH3?7n~f4VK289&QpH7`h$h;XxqUw zdzM)3fyr{mSmjEE~yivN!pS1Kx}~DMFKO zcvhvZK&OYrObBru%(ZS}O^22yKTouj<0Fm*lIpa`jT;%1UOVG?-u^?BZ?~^g`s6%T zBMkvlyif4KR-R$q4DHxzR5~^~yb&Wb0+KtE8!m=_>)zzS%$(@uKIIj!nmulIsHBWp zV&VZ-GbG=Tq+psfMSne8IJfKRmv7tNC5`{Qo8#;E?ay?eR*vBk9w?p>lAAq-rK9!T zUEdT34}5GZCCfl_m{p3R8u19ZC1J_7f!H8gBZI0QuW@6D3JOpcp z)BQ~x0=cut#2s%qF>FF%H`V8aB+(L4(WO69-m&yZWyeydRK14T9b7iL?EdSDpnVf3 zdt%s0W<)bPHU9&{YT(3ka~0=Y21LZT&pC6Ymx9@u@*dl`!q}5#Y=9|I$JjH#S*b(V zV@HZ7Wa?ll_^)Gf-`orWBU*$RabS=8@0aFfvzc26j3Vv9&sa~h<92_mxs#R3oDz(2 zh5m@SEW8r5)fS5hwD7;TrnJMhUU1FG%1@BxCf_#StgZ2s=m%*&BVfc>D=g^TL9fvX zhL@G=gwAcAI}w0L9ZJ)E>vDb^P}uvI`-H5PE4E~Vzd9tie~&}NEI8ppO>l(W)De-NW?-A+bwZ=n+4Rq?!WL3BuKB` z0tOjh<<$c^sXpf}uOce8{phzYP0KCT>x$0f(@-a$1`I1lXKX9^YT4R^tF;!&nbi)? zi$!qZT~Xg&-BjdgG5X~ep)MvJuZ^gYgtPbaqv{A3(7>1H@Kyqt7$var}cODwCvH1(ht_>n5|R5R_2Xf7UErRA{DlMZ}9Fz zQj*;BN|)>hJiLB&`BMV_ky`p?HhqOoTt}^g%iWff8-da|D{Ieu2Vn)~ZPvO)bq=P7 z3spaHcw5^igmy~i$sS~BUACwYK$U4rZ(c?rK@kcp{q9L+(}`#F((dzw&+ROFB9P|) z_LEA%|7yEKllUzmlPOAI^t>-e)P68gagS__4*yftZ+nhHQBpODNt>{!+h9#hFsO7 z^R4CM`1r8%j*_WXuIIM}4?jV$KKR_HOFH^6Q+M#BysvQKiZaHG%i1jbX`Jw>f4#Z0 z#+h1klvm%<`THGsO$8CeG_1prdj==}jO*;smWW?JyXOf`P!#R{42?bVDAaNn(DTmM zSPaU2S`Q@J{95zdsMF8K*dP*=y>q{wub+YfR<2YI>*;tF?U@nlO){n-UY{dBS`vXu zCrx$hOwD_&?~VSmUa+F-gRO>B{!~i}va@rOABhop9X>VmQUaZwiBGMm_5k1Fv8a); z?T-QoUZi?k<$Rm8v0s|GRMrs0&E2`_EBi4?smH$dik^Q`bcH`=<$TlGa8 zjxQ^v>A1ADqm6?ukHqBqW$>zvuyps(yL=l%<4-J9W2Umzu8kA-gyMDbhW4U929FMU zRaf7Sr~(o)3wdd%Fcp40n}nAJ4s(xQG_Q;I!;h|oHXTM(>ZTa&43W$Su(yH_`?AM! zZ=((9C{Zs2yuJ@x_>G2*4$v~o|6MP?=I*-1wNipN(Mq!G`Vb7c%l`B*IWLHp9i!_b zDp;Zvr107A1_7MmA@{Pgt5D?=i|`nixzy=e%KG?3GcRTxgcqQ7{}I|J#(DehT|4M= zCD2Z=JNbA0;pmCyPiFY;z@7$ zWVeQi$rTZ~%X>HaAKk*)e{|F<@BxQ@y{erWR>@1p2z@ z``x5kTgp?EWh0?Q8Vc0kJD5Ytifo>dWS$BogJAPq>+(^Qd06aZ@0&`ymW^psi{2s| zv4uBQzq?^Ln_%^gtxmOlfmrHePwCmcq6KBOE*LiEX|u(tTU=T)D7lP3M()S<*D*{3 z*&Uh{co5RJmvN+$>#zzriZ@jCBtWzpR7ahMu1D6hSf#zBGuS|JYu{V98+k6C?|D>2 z59Y0ANyplb);M88rH&4NEpGp|LNDc)CXLl4NDxMRlK+;a zWb!GVAB9RbJP`*?x!(Y2(apEZ5}z2_RH$hB+$tFF_$FuJ69Dl-Z}jW;2?mFB(;PCe z^`Eag^Vj6l`tg35l?vnI)jBt?t9`W6(4Z$B93YJ|Ah08rn5roC+-$V`P(6HBL*g=; zJfjTog#SJxxWtShRTOlYs%nW29~yk~alBU4+{lQ7Sao6jcLglW(XB};2-nW25>K=Y z{`T$Z4iWrx%J5h%*6)7O@NJ!}#qk)OXR~ zHZ^`| +#include + +extern void startAlgorithm1(); +extern void startAlgorithm2(); +extern String getLedState(); + +WebServer server(80); + +const char* ssid = "ESP32"; +const char* password = "12345678"; + +void handleRoot() { + server.send(200, "text/html", R"rawliteral( + + + + + + ESP32 LED Control + + + + +

ESP32 LED Control

+ + + +
+
+
+
+
+ + + )rawliteral"); +} + +void handleAlgo1() { + startAlgorithm1(); + server.send(200, "text/plain", "Algorithm 1 started"); +} + +void handleAlgo2() { + startAlgorithm2(); + server.send(200, "text/plain", "Algorithm 2 started"); +} + +void handleLedState() { + server.send(200, "application/json", getLedState()); +} + +void initWebServer() { + WiFi.softAP(ssid, password); + Serial.println("WiFi AP launched!"); + Serial.println(WiFi.softAPIP()); + + server.on("/", HTTP_GET, handleRoot); + server.on("/algo1", HTTP_GET, handleAlgo1); + server.on("/algo2", HTTP_GET, handleAlgo2); + server.on("/led_state", HTTP_GET, handleLedState); + server.begin(); +} + +#endif // WEB_SERVER_H From ea767ba0d8ff674990792c443f654372cb7ed9c3 Mon Sep 17 00:00:00 2001 From: DmytroStarosta <151664402+DmytroStarosta@users.noreply.github.com> Date: Mon, 7 Apr 2025 23:51:22 +0300 Subject: [PATCH 2/2] Add lab2 Starosta Dmytro --- lab2/.vscode/c_cpp_properties.json | 18 ++++ lab2/.vscode/launch.json | 24 +++++ lab2/.vscode/settings.json | 59 +++++++++++ lab2/lab_2.2.ino | 77 +++++++++++++++ lab2/led_lightning.h | 24 +++++ lab2/pins.h | 8 ++ lab2/web_server.h | 154 +++++++++++++++++++++++++++++ 7 files changed, 364 insertions(+) create mode 100644 lab2/.vscode/c_cpp_properties.json create mode 100644 lab2/.vscode/launch.json create mode 100644 lab2/.vscode/settings.json create mode 100644 lab2/lab_2.2.ino create mode 100644 lab2/led_lightning.h create mode 100644 lab2/pins.h create mode 100644 lab2/web_server.h diff --git a/lab2/.vscode/c_cpp_properties.json b/lab2/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..cea4d3f --- /dev/null +++ b/lab2/.vscode/c_cpp_properties.json @@ -0,0 +1,18 @@ +{ + "configurations": [ + { + "name": "windows-gcc-x64", + "includePath": [ + "${workspaceFolder}/**" + ], + "compilerPath": "gcc", + "cStandard": "${default}", + "cppStandard": "${default}", + "intelliSenseMode": "windows-gcc-x64", + "compilerArgs": [ + "" + ] + } + ], + "version": 4 +} \ No newline at end of file diff --git a/lab2/.vscode/launch.json b/lab2/.vscode/launch.json new file mode 100644 index 0000000..f7206e6 --- /dev/null +++ b/lab2/.vscode/launch.json @@ -0,0 +1,24 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "C/C++ Runner: Debug Session", + "type": "cppdbg", + "request": "launch", + "args": [], + "stopAtEntry": false, + "externalConsole": true, + "cwd": "c:/Users/lviv0/Development/Arduino/Project/lab_1", + "program": "c:/Users/lviv0/Development/Arduino/Project/lab_1/build/Debug/outDebug", + "MIMode": "gdb", + "miDebuggerPath": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ] + } + ] +} \ No newline at end of file diff --git a/lab2/.vscode/settings.json b/lab2/.vscode/settings.json new file mode 100644 index 0000000..c9e66f1 --- /dev/null +++ b/lab2/.vscode/settings.json @@ -0,0 +1,59 @@ +{ + "C_Cpp_Runner.cCompilerPath": "gcc", + "C_Cpp_Runner.cppCompilerPath": "g++", + "C_Cpp_Runner.debuggerPath": "gdb", + "C_Cpp_Runner.cStandard": "", + "C_Cpp_Runner.cppStandard": "", + "C_Cpp_Runner.msvcBatchPath": "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Auxiliary/Build/vcvarsall.bat", + "C_Cpp_Runner.useMsvc": false, + "C_Cpp_Runner.warnings": [ + "-Wall", + "-Wextra", + "-Wpedantic", + "-Wshadow", + "-Wformat=2", + "-Wcast-align", + "-Wconversion", + "-Wsign-conversion", + "-Wnull-dereference" + ], + "C_Cpp_Runner.msvcWarnings": [ + "/W4", + "/permissive-", + "/w14242", + "/w14287", + "/w14296", + "/w14311", + "/w14826", + "/w44062", + "/w44242", + "/w14905", + "/w14906", + "/w14263", + "/w44265", + "/w14928" + ], + "C_Cpp_Runner.enableWarnings": true, + "C_Cpp_Runner.warningsAsError": false, + "C_Cpp_Runner.compilerArgs": [], + "C_Cpp_Runner.linkerArgs": [], + "C_Cpp_Runner.includePaths": [], + "C_Cpp_Runner.includeSearch": [ + "*", + "**/*" + ], + "C_Cpp_Runner.excludeSearch": [ + "**/build", + "**/build/**", + "**/.*", + "**/.*/**", + "**/.vscode", + "**/.vscode/**" + ], + "C_Cpp_Runner.useAddressSanitizer": false, + "C_Cpp_Runner.useUndefinedSanitizer": false, + "C_Cpp_Runner.useLeakSanitizer": false, + "C_Cpp_Runner.showCompilationTime": false, + "C_Cpp_Runner.useLinkTimeOptimization": false, + "C_Cpp_Runner.msvcSecureNoWarnings": false +} \ No newline at end of file diff --git a/lab2/lab_2.2.ino b/lab2/lab_2.2.ino new file mode 100644 index 0000000..8c87734 --- /dev/null +++ b/lab2/lab_2.2.ino @@ -0,0 +1,77 @@ +#include +#include "pins.h" +#include "web_server.h" +#include "led_lightning.h" + +uint32_t interval = 100; + +bool lastButtonState = HIGH; +uint32_t lastDebounceTime = 0; +uint32_t debounceDelay = 50; + +void increaseInterval() +{ + interval += 100; + Serial.println("Interval increased: " + String(interval) + " ms"); +} + +void initPins() +{ + pinMode(buttonPin, INPUT); + for (int i = 0; i < ledCount; i++) + { + pinMode(leds[i], OUTPUT); + digitalWrite(leds[i], LOW); + } +} + +void IRAM_ATTR handleButtonPress() +{ + uint32_t currentMillis = millis(); + if ((currentMillis - lastDebounceTime) > debounceDelay) + { + increaseInterval(); + lastDebounceTime = currentMillis; + } +} + +void readSerialMonitor() +{ + if (Serial2.available() > 0) + { + char command = Serial2.read(); + if (command == 'С') + { + increaseInterval(); + Serial2.println('R'); + Serial.println("send response"); + } + else if (command == 'R') + { + increaseInterval(); + Serial.println("Set interval"); + } + else + { + Serial.print("Unknow command: "); + Serial.println(command); + } + } +} + +void setup() +{ + Serial.begin(115200); + Serial2.begin(115200, SERIAL_8E2, 16, 17); + initPins(); + initWebServer(); + attachInterrupt(digitalPinToInterrupt(buttonPin), handleButtonPress, FALLING); +} + +void loop() +{ + server.handleClient(); + readSerialMonitor(); + ledLighting(interval); +} + diff --git a/lab2/led_lightning.h b/lab2/led_lightning.h new file mode 100644 index 0000000..bb434ab --- /dev/null +++ b/lab2/led_lightning.h @@ -0,0 +1,24 @@ +#ifndef LED_LIGHTNING_H +#define LED_LIGHTNING_H +#include "pins.h" + +extern void sendLedState(); + +uint32_t previousMillis = 0; +uint8_t currentLed = 0; + +void ledLighting(uint32_t ledInterval) +{ + uint32_t currentMillis = millis(); + + if ((currentMillis - previousMillis) >= ledInterval) + { + previousMillis = currentMillis; + digitalWrite(leds[currentLed], LOW); + currentLed = (currentLed + 1) % ledCount; + digitalWrite(leds[currentLed], HIGH); + sendLedState(); + } +} + +#endif // LED_LIGHTNING_H \ No newline at end of file diff --git a/lab2/pins.h b/lab2/pins.h new file mode 100644 index 0000000..9f9caf5 --- /dev/null +++ b/lab2/pins.h @@ -0,0 +1,8 @@ +#ifndef PINS_H +#define PINS_H + +const uint8_t buttonPin = 13; +const uint8_t leds[] = {2, 4, 5}; +const int ledCount = sizeof(leds) / sizeof(leds[0]); + +#endif // PINS_H diff --git a/lab2/web_server.h b/lab2/web_server.h new file mode 100644 index 0000000..60f0957 --- /dev/null +++ b/lab2/web_server.h @@ -0,0 +1,154 @@ +#ifndef WEB_SWERVER_H +#define WEB_SERVER_H + +#include +#include + +extern void increaseInterval(); +extern uint8_t currentLed; + +WebServer server(80); + +const char* ssid = "ESP32"; +const char* password = "12345678"; + +void handleRoot() +{ + server.send(200, "text/html", R"rawliteral( + + + + + + ESP32 LED Control + +

ESP32 LED Control

+ + + +
+
+
+
+
+ + + + + + + )rawliteral"); +} + + +void handleClick1() +{ + increaseInterval(); + server.send(200, "text/plain", "Button clicked!"); + Serial.println("Button clicked!"); +} + +void handleClick2() { + Serial2.println('C'); + Serial.println("Send command"); +} + +void sendLedState() { + server.send(200, "text/plain", String(currentLed)); +} + +void initWebServer() { + WiFi.softAP(ssid, password); + Serial.println("WiFi AP launched!"); + Serial.println(WiFi.softAPIP()); + + server.on("/", HTTP_GET, handleRoot); + server.on("/algo1", HTTP_GET, handleClick1); + server.on("/algo2", HTTP_GET, handleClick2); + server.on("/led_state", HTTP_GET, sendLedState); + server.begin(); +} + + +#endif // WEB_SERVER_H \ No newline at end of file