From 09b8b8087c0ef761c51c35461c64cf82b7ae2f2e Mon Sep 17 00:00:00 2001 From: Sashka <github@durdom.com> Date: Mon, 23 Oct 2017 17:59:13 -0400 Subject: [PATCH] Add libesphttpd to extras and supporting example (#458) * libesphttpd: added extras and example * Added "heatshrink" as a submodule * Updated libesphttpd * Updated libesphttpd * Trying to fix the commit id * Updated libesphttpd * Added zlib1g-dev package * Use native gcc to build mkespfsimage and mkupgimg * Added NS and GW for DHCP server configuration --- .gitmodules | 6 + .travis.yml | 1 + examples/esphttpd/FreeRTOSConfig.h | 11 + examples/esphttpd/Makefile | 16 ++ examples/esphttpd/cgi-test.c | 90 ++++++++ examples/esphttpd/cgi-test.h | 8 + examples/esphttpd/cgi.c | 81 +++++++ examples/esphttpd/cgi.h | 10 + .../esphttpd/html/cats/cross-eyed-cat.jpg | Bin 0 -> 36487 bytes .../esphttpd/html/cats/junge-katze-iv.jpg | Bin 0 -> 34289 bytes .../esphttpd/html/cats/kitten-loves-toy.jpg | Bin 0 -> 49447 bytes examples/esphttpd/html/flash/140medley.min.js | 2 + examples/esphttpd/html/flash/index.html | 75 +++++++ examples/esphttpd/html/flash/style.css | 34 +++ examples/esphttpd/html/index.tpl | 26 +++ examples/esphttpd/html/led.tpl | 15 ++ examples/esphttpd/html/style.css | 17 ++ examples/esphttpd/html/test/index.html | 9 + examples/esphttpd/html/test/test.js | 205 +++++++++++++++++ examples/esphttpd/html/websocket/index.html | 69 ++++++ examples/esphttpd/html/wifi/140medley.min.js | 2 + examples/esphttpd/html/wifi/connecting.html | 43 ++++ examples/esphttpd/html/wifi/icons.png | Bin 0 -> 914 bytes examples/esphttpd/html/wifi/style.css | 24 ++ examples/esphttpd/html/wifi/wifi.tpl | 94 ++++++++ examples/esphttpd/io.c | 72 ++++++ examples/esphttpd/io.h | 7 + examples/esphttpd/user_main.c | 210 ++++++++++++++++++ extras/libesphttpd/component.mk | 64 ++++++ extras/libesphttpd/libesphttpd | 1 + 30 files changed, 1192 insertions(+) create mode 100644 examples/esphttpd/FreeRTOSConfig.h create mode 100644 examples/esphttpd/Makefile create mode 100644 examples/esphttpd/cgi-test.c create mode 100644 examples/esphttpd/cgi-test.h create mode 100644 examples/esphttpd/cgi.c create mode 100644 examples/esphttpd/cgi.h create mode 100644 examples/esphttpd/html/cats/cross-eyed-cat.jpg create mode 100644 examples/esphttpd/html/cats/junge-katze-iv.jpg create mode 100644 examples/esphttpd/html/cats/kitten-loves-toy.jpg create mode 100644 examples/esphttpd/html/flash/140medley.min.js create mode 100644 examples/esphttpd/html/flash/index.html create mode 100644 examples/esphttpd/html/flash/style.css create mode 100644 examples/esphttpd/html/index.tpl create mode 100644 examples/esphttpd/html/led.tpl create mode 100644 examples/esphttpd/html/style.css create mode 100644 examples/esphttpd/html/test/index.html create mode 100644 examples/esphttpd/html/test/test.js create mode 100644 examples/esphttpd/html/websocket/index.html create mode 100644 examples/esphttpd/html/wifi/140medley.min.js create mode 100644 examples/esphttpd/html/wifi/connecting.html create mode 100644 examples/esphttpd/html/wifi/icons.png create mode 100644 examples/esphttpd/html/wifi/style.css create mode 100644 examples/esphttpd/html/wifi/wifi.tpl create mode 100644 examples/esphttpd/io.c create mode 100644 examples/esphttpd/io.h create mode 100644 examples/esphttpd/user_main.c create mode 100644 extras/libesphttpd/component.mk create mode 160000 extras/libesphttpd/libesphttpd diff --git a/.gitmodules b/.gitmodules index 17f8003..6790fd5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -28,3 +28,9 @@ [submodule "extras/crc_generic/crc_lib"] path = extras/crc_generic/crc_lib url = https://github.com/Zaltora/crc_generic_lib.git +[submodule "extras/libesphttpd/libesphttpd"] + path = extras/libesphttpd/libesphttpd + url = https://github.com/nochkin/libesphttpd +[submodule "extras/libesphttpd/libesphttpd/lib/heatshrink"] + path = extras/libesphttpd/libesphttpd/lib/heatshrink + url = https://github.com/atomicobject/heatshrink diff --git a/.travis.yml b/.travis.yml index 39674fe..4d2597d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -34,6 +34,7 @@ addons: - git - help2man - vim-common + - zlib1g-dev before_install: - pip install --user pyserial diff --git a/examples/esphttpd/FreeRTOSConfig.h b/examples/esphttpd/FreeRTOSConfig.h new file mode 100644 index 0000000..d6d9c5e --- /dev/null +++ b/examples/esphttpd/FreeRTOSConfig.h @@ -0,0 +1,11 @@ +/* FreeRTOSConfig overrides. + + This is intended as an example of overriding some of the default FreeRTOSConfig settings, + which are otherwise found in FreeRTOS/Source/include/FreeRTOSConfig.h +*/ + +#define configUSE_RECURSIVE_MUTEXES 1 + +/* Use the defaults for everything else */ +#include_next<FreeRTOSConfig.h> + diff --git a/examples/esphttpd/Makefile b/examples/esphttpd/Makefile new file mode 100644 index 0000000..2362443 --- /dev/null +++ b/examples/esphttpd/Makefile @@ -0,0 +1,16 @@ +PROGRAM = esphttpd +EXTRA_COMPONENTS = extras/dhcpserver extras/rboot-ota extras/libesphttpd + +ESP_IP ?= 192.168.4.1 + +#Tag for OTA images. 0-27 characters. Change to eg your projects title. +LIBESPHTTPD_OTA_TAGNAME ?= generic + +LIBESPHTTPD_MAX_CONNECTIONS ?= 8 +LIBESPHTTPD_STACKSIZE ?= 2048 + +PROGRAM_CFLAGS += -DFREERTOS -DLIBESPHTTPD_OTA_TAGNAME="\"$(LIBESPHTTPD_OTA_TAGNAME)\"" -DFLASH_SIZE=$(FLASH_SIZE) +EXTRA_CFLAGS += -DMEMP_NUM_NETCONN=$(LIBESPHTTPD_MAX_CONNECTIONS) + +include ../../common.mk + diff --git a/examples/esphttpd/cgi-test.c b/examples/esphttpd/cgi-test.c new file mode 100644 index 0000000..7a16aed --- /dev/null +++ b/examples/esphttpd/cgi-test.c @@ -0,0 +1,90 @@ +/* +Cgi routines as used by the tests in the html/test subdirectory. +*/ + +/* + * ---------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * Jeroen Domburg <jeroen@spritesmods.com> wrote this file. As long as you retain + * this notice you can do whatever you want with this stuff. If we meet some day, + * and you think this stuff is worth it, you can buy me a beer in return. + * ---------------------------------------------------------------------------- + */ + + +#include <string.h> +#include <stdlib.h> +#include <stdio.h> + +#include <espressif/esp_common.h> + +#include "cgi-test.h" + +typedef struct { + int len; + int sendPos; +} TestbedState; + + +int ICACHE_FLASH_ATTR cgiTestbed(HttpdConnData *connData) { + char buff[1024]; + int first=0; + int l, x; + TestbedState *state=(TestbedState*)connData->cgiData; + + if (connData->conn==NULL) { + //Connection aborted. Clean up. + if (state) free(state); + return HTTPD_CGI_DONE; + } + + if (state==NULL) { + //First call + state=malloc(sizeof(TestbedState)); + memset(state, 0, sizeof(state)); + connData->cgiData=state; + first=1; + } + + if (connData->requestType==HTTPD_METHOD_GET) { + if (first) { + httpdStartResponse(connData, 200); + httpdHeader(connData, "content-type", "application/data"); + httpdEndHeaders(connData); + l=httpdFindArg(connData->getArgs, "len", buff, sizeof(buff)); + state->len=1024; + if (l!=-1) state->len=atoi(buff); + state->sendPos=0; + return HTTPD_CGI_MORE; + } else { + l=sizeof(buff); + if (l>(state->len-state->sendPos)) l=(state->len-state->sendPos); + //Fill with semi-random data + for (x=0; x<l; x++) buff[x]=((x^(state->sendPos>>10))&0x1F)+'0'; + httpdSend(connData, buff, l); + state->sendPos+=l; + printf("Test: Uploaded %d/%d bytes\n", state->sendPos, state->len); + if (state->len<=state->sendPos) { + if (state) free(state); + return HTTPD_CGI_DONE; + } else { + return HTTPD_CGI_MORE; + } + } + } + if (connData->requestType==HTTPD_METHOD_POST) { + if (connData->post->len!=connData->post->received) { + //Still receiving data. Ignore this. + printf("Test: got %d/%d bytes\n", connData->post->received, connData->post->len); + return HTTPD_CGI_MORE; + } else { + httpdStartResponse(connData, 200); + httpdHeader(connData, "content-type", "text/plain"); + httpdEndHeaders(connData); + l=sprintf(buff, "%d", connData->post->received); + httpdSend(connData, buff, l); + return HTTPD_CGI_DONE; + } + } + return HTTPD_CGI_DONE; +} diff --git a/examples/esphttpd/cgi-test.h b/examples/esphttpd/cgi-test.h new file mode 100644 index 0000000..a2c752e --- /dev/null +++ b/examples/esphttpd/cgi-test.h @@ -0,0 +1,8 @@ +#ifndef CGI_TEST_H +#define CGI_TEST_H + +#include <libesphttpd/httpd.h> + +int cgiTestbed(HttpdConnData *connData); + +#endif diff --git a/examples/esphttpd/cgi.c b/examples/esphttpd/cgi.c new file mode 100644 index 0000000..5b83ca2 --- /dev/null +++ b/examples/esphttpd/cgi.c @@ -0,0 +1,81 @@ +/* +Some random cgi routines. Used in the LED example and the page that returns the entire +flash as a binary. Also handles the hit counter on the main page. +*/ + +/* + * ---------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * Jeroen Domburg <jeroen@spritesmods.com> wrote this file. As long as you retain + * this notice you can do whatever you want with this stuff. If we meet some day, + * and you think this stuff is worth it, you can buy me a beer in return. + * ---------------------------------------------------------------------------- + */ + + +#include <stdlib.h> +#include <string.h> +#include <stdio.h> + +#include <espressif/esp_common.h> + +#include "cgi.h" +#include "io.h" + + +//cause I can't be bothered to write an ioGetLed() +static char currLedState=0; + +//Cgi that turns the LED on or off according to the 'led' param in the POST data +int ICACHE_FLASH_ATTR cgiLed(HttpdConnData *connData) { + int len; + char buff[1024]; + + if (connData->conn==NULL) { + //Connection aborted. Clean up. + return HTTPD_CGI_DONE; + } + + len=httpdFindArg(connData->post->buff, "led", buff, sizeof(buff)); + if (len!=0) { + currLedState=atoi(buff); + ioLed(currLedState); + } + + httpdRedirect(connData, "led.tpl"); + return HTTPD_CGI_DONE; +} + + + +//Template code for the led page. +int ICACHE_FLASH_ATTR tplLed(HttpdConnData *connData, char *token, void **arg) { + char buff[128]; + if (token==NULL) return HTTPD_CGI_DONE; + + strcpy(buff, "Unknown"); + if (strcmp(token, "ledstate")==0) { + if (currLedState) { + strcpy(buff, "on"); + } else { + strcpy(buff, "off"); + } + } + httpdSend(connData, buff, -1); + return HTTPD_CGI_DONE; +} + +static int hitCounter=0; + +//Template code for the counter on the index page. +int ICACHE_FLASH_ATTR tplCounter(HttpdConnData *connData, char *token, void **arg) { + char buff[128]; + if (token==NULL) return HTTPD_CGI_DONE; + + if (strcmp(token, "counter")==0) { + hitCounter++; + sprintf(buff, "%d", hitCounter); + } + httpdSend(connData, buff, -1); + return HTTPD_CGI_DONE; +} diff --git a/examples/esphttpd/cgi.h b/examples/esphttpd/cgi.h new file mode 100644 index 0000000..5cb7296 --- /dev/null +++ b/examples/esphttpd/cgi.h @@ -0,0 +1,10 @@ +#ifndef CGI_H +#define CGI_H + +#include <libesphttpd/httpd.h> + +int cgiLed(HttpdConnData *connData); +int tplLed(HttpdConnData *connData, char *token, void **arg); +int tplCounter(HttpdConnData *connData, char *token, void **arg); + +#endif diff --git a/examples/esphttpd/html/cats/cross-eyed-cat.jpg b/examples/esphttpd/html/cats/cross-eyed-cat.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e166e871d87539efd48b1695540f6abbc96444af GIT binary patch literal 36487 zcmb5Ubx@m4)HY73K?}v*-J!TcAtVHM3EC0@!HYY6Xp!RXn&4i7Q)nM7xC9TB(xM5{ z;ssjhkLP{A@B9CE?wOsPJ@@X}nLX#4v)7)#%YVNSkZXgqKm_;h-6H_seFT432>=8S z?>~6(;QqtA=HbJKj~<f{J-!pNr%#DVD99)&Daa@&sA!q#sHhofC@APT=owj9*x1;p z=s3AKS-F{6*;xNu<lf!X$B!OABO-dnN=-q{`u|)0_7hML-ODF*zJHH`fRN(eeTsX3 z2ML%72=3o)_P_o9A0fQ|;NC-mM~{i_v<&~N`hPkCf_nsa`iFm42uSYVb;<9O-wj=| zs`Lt>IHy%jSCql;YBP-GvSZ%Qot9BV?+Ywi)L*vu>IntyR}9#)hT=)76_o3&;bl_5 zmhZ}PN9UDm*=~Z3PLPL-Ds#zQM*q47?-jD^56w&l?7#~OQ2}!c`GjxN@}W}FB-TCS z0>PA<0x^3{l{NT!uYx5+mnb?)uIPETlfQZ3+*bq0uKZS4nnbe8?(7$rw#+0aTbROh zHP_5RFRQ}d>vbKb^0ueudoU(G&5@8`?>1}Y1~Ml%@p*YDqs>i|P*y?Ig0m^qB=uoX z_v;-y&N1s8rs}guy>z&Ps>wNX6LsE1r5Q<+OGkS_$JURZ<7)c5d2_5xSN?mx`?Kd) za(Er?&U=#dXYyw_sF!qV2fqef-2fq~OzXR35_4_SVMoW&+~P0ZrF?pHa|ORR_oo=q zQWTzd{O7t@7t&>9=MO2*tmvwKOmX@?#k8K0e_=!ar7)&hM-@q5fi{j$F$Y>L+?=0i zBHl`~Ue!V5J7PU^M2GfIy#15XgaR|SOPK1IIurzL+=J6<P1SYkpQuWQtzLN{#?3Rn zch?>8A&!c?$FwzD>PoZSk43|6Ci>Xa#*Jd-gr@4+^8U$jk$*7$T2(09gR+7|L%uCm zy)VC{&X<dDV8z0jbJ#p!Y1A&>yRG~;x&@TDR~!!CAAX1X_6H9Xp>1AZ*<I-Q)uNbG znGevapNd<wRAhl4#zusMWZ3L%bWCfKq9<dz>&=`JtD2PL8JxW@{<O&hXm?G?-dnm5 z{v!&@O@h6IHjH>wOC|7B<AWdb-lvuh5ye;eML=0&cHL%rw{UgdRnQ9j#Q7EB98g+V zk8WRC*Gs(7Ov!cX+;q!kd0nflb{FTL!+px}`m~YPe^8$)YY0>?y|8GHC}1>Nq7vqy z3`bK8@z`e#lq+P^fhEO?^w|jM&mZ2CQF_la#MoYewjde7PHNVbEjX>`Y~xoA{kKJr zMuqFq`@4%19>t%<RGU;H>jmOn5-E2-EReZrVx;{NYm2i{v*=lC&Ws}8r+G#CN+Q(n zk^;yvAIG_h_vm94-qO_nx|*CwT!Ojdo>jQ6oO2PM8qk{K)Ep^E1!Dx~4p6>hUvMf3 zdMtt=iglZ(IGC@(aRKC2C1ZfBfl8uupgwdpNw}+DtKxw-Q@%;FayOUJu5CBYi&vpo zV?;AXVTY=vYcIV)z~{zHURzJ-AItp=r~2BRsv^vof2%@H9o0mA&EyZO2xF~@Lu%NQ zDCyoj`o}LKCC@D|fnc`{)<)JqeI2KK@&2<`5B(-x>ID(l-~fkjLh-h_jcmcSyWgkY z9t^NdI>zuRP+-z$!q3iXzj7;Y3Y7cRH?cOmqGpWM%7U*fD+_m#1-Ewa(3OM<Hw+!@ z3V|{HI3Du;MMi3;+76?S3rD|kfA&~>OVqT8*t>$xtC}To%=pEos7&uEX>LbT*YA6b z-F#o&9Vvgs=NVa+zpH%8xU*~FY;IDT_Wn6(KCeEpV7~rt*=C(L(xE{YBf+Ox?doQd zy%F%piCo&yRXoSqO3hjiuL#Y{I%1K*WI(KFR23hT*kDD+Hf<}aG%a6FWx<I@+q&Gx zVCj?FEWtmdrRns&X1w+NRUm%PJGbXse}ux@*-8r=G7Hz7`1NS)2MjiAPkWn8a?iAP zl%FiLO5`)=#lD71m=oq>H7x;;Me(ZOJjP3Vzz*Zf_2f)vSKlf8sJ^8#v}$%D+0f1G zc&RZ@Dn2dS#O7F2*P_SgJ757H^HbVHvQfn@!kGV8d`q|dnXR!DAl1@8vunpxG;GaI z&n}`JY7NoH0QJ+|Byp#~87k!)`md%S>JJ~PAUU`I=7#}kQ>G<kI5nC2sq3)og`%;- z$&-sy>{Owv`tDCvHP=&H5r>arloVr<%07=Hd;Dko+zL8MD)uMwe9C_!q$hVjRR4;X ztn=-PZgZbw5KeJZDtHd}f!MM#)lDwMG&9s=ASTGRwE3v~<fu$ZN|NaO78AJ_Onkbo z-IdEaVsFo0><Yd!->jft)b<M*L2V6JuLF7lDSz=A@4EJv89IYqekJRp1dwYRlg{T& z2G0`1E@ZDtR0{Q7Nx?gF*4fd>n)HSkQuqxl8DRRdSn<wk&#(HB@zuc`&fGb8j%Eh9 z(kHu$^vTH&wHSl<dyRFnE@EPR*95@IIms$#{i(5lXW&q-3l@1yy~z8hr6|b?*v_ua z8qA9OE4S~9<d)U1Z#>Rkf8c8xIiB0-@(j6m+!)Qm9$BQR-<ai}fk3>c86HdFbCvTu zYk^3i^-8#aBBCF9iybOviJ|<$1(A956+mfErww<pRD4IKCv2viLlP)DRXg<qeLXb) zRsMH>TmD}CUh`3Du-VvGwTV%xcs`qpvxw96q;}9J9fM7~h#5+FWy7l#e&2t$mnz+= zgsUv#FZXa7dJ?bk1_d?5TvQA)pu8edy}A63w6b~XcuLDr$Ums(^m6mkp*n`G9iGei z0Gr$m_^zAW#8fx)^;(jtxtqxTbY6X}B4n)#ql=ls(4uk#tLrz!Rg&KL?4u8zDIfg# z%%UP&qOao8QC#I|Z#$PS8TL76$q#o~o1K<pCV&|mgSeiY`yH}`WDwU6L^bBxp%gk^ zAo=*81lu`&bMl!TlWDOkgICS<*6=oSYG$blFt^(X)=%rlirCBtY!Bn7>i27k<P0&U z0xGBuL0{!yVXsO9?6ptTi>|z`q$B$E-Ol;7ptFwTPp4!#b3ei@w7JrSKr6Lki^1~q z%S)QY4Z95<6B3<;COMK$#|2aD?xX<LED0iz`}mZ>y*a@pGyG)9%L`v-$0%+?%yw$f zwp2%PBl66rB)CfCRL0I1yhBQ~q}cWrKb`B!?AGaamYjD(X6YF<(`EIdWcq8wPYl$g zC@5W^B6V(PXd&O`Ad^c$$;@Z<@dF|OiNet_j*nA61!okL%Xr-LXY-v#<i?MUWa`>u zQhJt*$`Dz`KAYlG^I^XpE7$hUNd)XH9`?t+RXQX~)^A3yi_IvrI=NpJ?k7x_1zp^n z23?Ch1S7D!0x9G2ejE9RxNT=`nkb(!=1y}1t7po(m5VTE5mqB9h8XoKhEYhb?xJt- zr1MIwv5PQ|;v-l#RBHR9PMbm9S#0Ah4kj%M+4|nFp{dO4v>%C2-g2^IK3xgYM>ROM zWqGkQX%?H>lW9%||Bkp>Vp(%cpqI^L*Z9z$-%0-k63h^EwVXDqeTBcDON1}qc_o%S zT>P(kOsWKBoj6O0pDe_wVy}n~rVpB-)R8bT-!o5{ZM@<DPf9gfK<rp}|HY*M{QL@s zl6;*+oKxzjNwi!2&TNXPYd^Ua|0S?qbe|b~Vs}!h@xXE?el}mlX=(Ume*#^_#6>)y zBU6~jXCxu#p(G>Plb0Qwm<q^n2_2`5V$oVq)*p;XNafyPtW1F12%m+dgEPUhb?{OR zUrCLcq@_igY?<v8K8?}$YtCIg;j+5n$sc%A1h((|<=-7!iX^LD|7;n`{StfWqSxY| zJY@=(rSzt3=8Z5Et$(E13YuN#kIS8sE9*I;-2+_RWV0lUNEFCkd`Nw781H^t9|$gY z%KTuSJx7iofupjz`D>kyhouK9=Guxo^xwQ%%2{-yB?6P6%hBr^V?g&^7|tsPI9y{I zr|YA+9sDz8x^mlnHaWJ9rre{AkC%<lOA9_{vXh>^te)WX^i&K&x@F~G05EJ7B_#@z z%)vAKc+iy|u4wgW0H9gA>FVC=nY-pJ1+eihmedSwQtjR!Z^(<T+XJ6mo%1GrasVly z8}P$jpM*<G%a?@2xR=;Uv{3KcOQ<D@Czelia*DPOimk``3WR5vP(3fca!!ylbwEmV z-PgWfk8l`GrRJ=kp1rIv7AhUzdBuv->sCsf2(I1#XQr3JLa@qrZZRUEQYCs?y$GoJ z;)}j*SKi^3ZAotMO@y+lmTKVM)eWhy;L4NYpv&L^UcdS}s!9`{nfVo`xY&Y$@(52v zrg#l%YAevq^X1EzlNEOnH%Gg<r0^?Iw~_*!^Y!E`s?tZ9U66BT`Q)jCAH`KdFpHCU zawSH}v*qhzM4G}itFB(Xi)2&6>2EptpC`>{w72UEr=d4tx0RYToblVRP2c6Gu2E77 z0t&|=&C&8-evKUm8i>>>B&KfX=N8k9wTaSO=UJuBxhkKQRm#3dGf36^aTP)fcZS!! zgzvL6tuPnazKo+J=F~IcbrV?(S?O*J@y9GexZi1U?_EW(eoj2OQS1)B{Y$WV0$)@H zGQ8l=ll1jQ@EOT0)%8oE9iY5Ctb8dwcAltRBSRqnBp{R8(r`pex7*rT-~B78Of(3k zs<w>>H--tnV&+r>a^OBf_I?&`8&wSYbJ6L_LMqs(hccGGYCVj6WS*8Xc6!Dhk<*bs zEKjIrk_fTL!FtWiqX}0O1Zl_2^lbD)cY+lShJCG)JEVQ9d6Mc)HgrU(^X$Gpg@n3t zyaoMdN~1jBb$r{y%#=mAeoV{Ux)KeHdh%X<LguXIlQkCFkASxHdGdUd7ph!If0Csy zSj1NsZ3$H#JX?fSGEU6+ZBd-N2ltFLg8WaF0*6oiro!(lJSnZKe}PDMN{I<D%i>FG zg)eb6Grqm2`eJjh*i=EKENLOtYPyZtzb!fYIGrISm|KnWVUn`?B2Rtp8ta0*w!Lgo zn5gU|x)$SG{LbIK)6Q0e3|R$e6_-vfELJOZL5<oI4>ygy#zOsl=T5LOm6P}EjAI*N z+3EijkkN{}5sc0-5~}Rx)cChVBMq}p9=%)i(*Jbqi86#sCsvO<IwxTPi)!u-?k1j3 zvcCAUD61@!M=BVL+HI-FBBJF36t<p@a34bKDkaiP^RFg;o_fh@`79(^kB1ApA}3j! zwB`yHxRDQu3b-GZF-@73N`+S{^XM>(8G=3-dPy&-O&e4x`e!&KCBlrssgM=k@elEg z#2F+PEs!D=gAy&1{=IsIv{`^A4*3YK6Ick#rr6_tGN#+F#Qa$x>CX-=)WUbkAbD@h z>e+j6L7l6A7UBC=Wguv^J~>);wdm+=rrgB4D48k%q$L>VMuS*j8mCYvr>4o`pR11y z)#x%Y*?j?S3_2zC9bTC6U0(Fm(>jS}G^&1zKu~Ct)W*a_q9Q-}7T-b{H%PYaWow25 zPgf0>Tgo2&5C8%ZAq+Y9`QI<Mm2monPlZ3BfMsO3ye183X>)3s#ZSF23yyfJR?1$H zc{S&s4%OOIDq}wI7)g7g@sAl|#H{T@9OKG7BM$yfEVf~e72Hx2Wyn{o<f$z8<@)&7 zlnCo2X1lS9H8Z8UrHZSSx$@;#+N7chd7mVP`m1}NhLtBXL8|};WcfL7cmCw+Q2v0Q zqMH0Y%Oq)OTDd+-*w}+zUo3leb7@9_Ask-qV!9G#Zi@S?A@2r)F9O-sy08&mv38m& zg^itCUEYvMyw6(Cb<pg>)nw~}wN8B%fJ+nWD=sPZta<OZV%JjH1VwiqYdMWapuX3l z=b}~e@`DF1I-wAAGw{F0lCF*Nmov{0r5Vx^N?0vk8FSFshMK;Wlv!zQk|SS14jdwV zQrI09Ak8~mPWWZXcS$FCE&2T-YS^Smd*fXeZuUG#Bm806RKTZG+h;8=%#A)cJwniL z<xg(hI3+PbSV8UmaF=StlVx;n@Z};c+9JQ`zE!^t@~u%)1#N3EC`m{Yj<)Q}6m<RO z{6@Se?26DPjd&a9v+$=I)-`*uwC$8spM)6C?4stMm%pJa+o4@P7vtwT^B|R;ESUT~ z(8iS7@YWHQAyPnTSGBJ&mkx5T9@sfEX|Z&hmqN)wNuk21+*DYGm`SBxH5h0j3bUAm zR*i1jRGL1q8WY($lXopV)2lSQs#|2SoBE)UqXw{Z>NCKHe^ZYn7jg1p<fkp8Y}lCG z9<6TX9@+K5JL?L^xP7HH$v>ym%c9o-v=td4qs_@pEb;yg@~@1_1jWIAGLpveB>R)k zJk4cK{`@+1e@{!>NYYW<u-z-YYi5?BfV<k)6HT|PFO3nO#@inHm~x{<zPHIp>19sB zeh-|B-zVlRzp_l4LCPpQ+2AD2dKz=UQ+cHb|AwgUa~e|d7*qwjAY+je2`+WcT7XMw z#74zd?#>X;v!T-V46B~6yH!v<1&O+5E7junGt}FAix2o=O>@7u^Jzsu`(leGMcf*3 zJzLBC=o}RfU(m_gHpF?V<|`jH)cmZEyGyHT?9f@@e$?a>HWTs({L2i%k8+ercT1v{ z&q7Ma)wNt-ZJe&(j|JDIr~j~mg%n!A>|Eu~1u7@a;ZsFL5B2Tp>(yh(_CD3W+_vb! z)F<f`!9?@G$T-Qy;uD<m&Zk^%TRuVG+7Ksww=+pi<SPXu*%z~#MCq?wg|*(cp$Oue z3sYgRU~we+ZHI*r;|}x=;@|Phs-UzNvzKZxT`Tyj$!t5*-5~yY;Y6?d9uXaTJ2U{Z z`Ym3Q+;bY?EJ1{5%*h&!*W=QslYG)EdG(VqMa62|$<5`<)}=y&F1-E?qE35K=OHl? zDF1XFUT&wD%okq@_jiN6V#H@8;oh@}9+~ahA@F|?qx!z4W<}X%Q>p*Tb9gr`g%>sp zI+V{6SL@<(6i&h1Nv`Ml9f^7_S2)*Cx#z@8qRj*-Yb2|O!lNY8s);Tmg3q9T^=H5F z^UX-NO-#k))f#W*U;YUBW>F2w^OV(8Nn()E>LKqCSjvzvcj&=ie%(GN2`15f^YWLs zls^G7)67j+J(K8(ptpyg!mHo^j-;O~&5@`jrB$FtO8L1l5J+iS^G*SgF)Bm$MLBkk z!;iXa{v1#Q=FPC+QuwxOFC&p~T3^85<yTe$?tZ0EGVLLavqLd$kqJp!By|)oy99)7 zO_JYE|M+&uN|On2LP?sV>dUmH@-toP6kc^J-^)(UgQm}PA4QXLCrKlB=31VP?#y~d za>Eu0$D9(YPqu^qi9x;X>ROao-3|V^8|-J)<%6`SZ-RVO_^OP;B+22^#Pogrwu*c% znnA8td!It9n269X(;~2EN|#@`VT>W-q#2ofkF+i4#r7w=pXb$gfGTlDVq$q3Ql>YQ z+h^kKWa_A^51GP?`q>bn@)@H3iqviqn+aDRtJ9W7zLFlLk7~wV5@%bYp2OPm0bkAn zWE+EfdyWFXJp(5)n8H5ah20#w_Yt3c>kXMgi+CBj3128k0ZdQqG9KsYGN>eja66&k zdilI#J$y9`d8IYok3OK1Mhp`8F`Uf-D6|%-Ru*7u#k4~MTh%r_-aqwiw|R3V%<muA zqQl|8(gl~-V(0-DeMkIo2L43I@*JL<rpkj|u$*f~j*a=<b{%f)vTLy>pSGg4U_$)b zz;yquNk`1;IC-i7eL!!Skidw@o`XSNO+A9pfr?LX*e@j0uACeru`h6+ApXy~a@acS z<mRemt6^ezu+CBmAU0Hd9zjZG$Nb~gJ;kCx6V#*3tU$f%T=cxqz9}@Q1(LxSV&5|F z_x4;gtBBwl@}y8*J22Ku@d+2wLARW$gM>>&acVYR*ENYXl5=5?@QJ=H%%TRCRiBQI z3YK4DQ}}+m_euF3)7hotSI$Fpa%fAAb1R<Aj>>OqMDGa{rmBED!45orG9m43-~7At zo>nYkrsV~dmHRNbbgT@Z@8aDA=acap??`#E9g+0zi@1!r>yqRv&)8DaE@yP@SD#*u z{;xH!v!1fY^w_zV&$pqcZcTEud_Qb1i}#dPhn!?I2?n2kPH}KN+n&OYyU!UTafX)h zg?>$<{|t34V3+QQb3t-~`vipd9uVG<>vxR#e+2qH!uu5D4=6drsn{QKs!33DJ%7Zl zE_uhK6W#rC?;)Ya@2rijk;z23p>Ae8lMF9!u#`Nb^jQXzcncLr!Eedx5u~K`XgZ%) zf3-uU<GF#Cp!4R}mi=MF9*b+VJC+)Xw8W~@E#`fGK6!+O*ziKjoQ6R%dJJx8i*2IB zQ1P?&1wSnJxCq1Je)c?SHU`V#$1aVpa&hPphd00>w)Dwv(8J#XYy41b4){v9vF41v zZr5wr2;U@!Suv(aj%#tcT*jHYyO(J+i+cmJ#zJ@wy-9vbK+JX^iTyq2wt%6h^%ME~ zyc27}TZOr`5dLBAQA83;g%&c02t8p6q#V2|R+#8b^Xf);oX!0PmqF3?dYnV=7<*3n zv`_4fT4XDGHbL=e|E39>y06m?Y0Ru+Bp6WfY;*Lz92_}=o8n~*iw*to5Z)#xTitDm zv%x+hdp+uycm||a84LNSlrG9!vbttS*(orC?-#>t88bp#g*WVZ*z0WPB$f2t9c*UA zvCqtw(~$ZmAJv&#oI@GR8yN+q;1qcFkg$lVk_WjI@oY$hIzEHd4ZYFqY|oUPdLzR( z085D_%=TNObw`s8`acpIf)~d!N^A~2(l2Aq3mH@RRDrp<-BACsk-Wn_eB$*{M_N$A zJ)ycY9Fw_J=(Z1rr-O_d>4Y5^S{ydwIJ^<0Mg2~f@#3vhwV{H{l0Y38l)3fTUpJN( z1z3<N45r3fO0?YS4&YkoRq66q{wVmqJC@@fPGA*pwS6{)xW#%41|Q8r=-hJG^m+H6 z$*d23Jithzb~hwM>OY-`BuQN>{3Y1mcK*dC9A^4HJ&BRuW^O~9jR?T?<)|lX5BGzn zXbVG<eRqdX{@xZ}9bR3*qxD+PPGMky*G8}C88bL<P#c}t<y|4alL+A{x{UyAADv{S zB~MI4-?T%%IHRHXIP{v|rBth?f!>!3J_QLVtcfOhBKI$We#&2h?{K@#Z1LBFlLs?n zbix|hD&(Dcbo97(N2ftft+F0`hg%D);8nFRwYeg*L^Hfg0NyumN*{s+iGH#gUo?{U z;&GU-ZeZCR-TZuRwzCiV<4@SIa9!`##`|grx#XR~m~oYE;X1H+>o|s=DB@B`&N=T( zX<;>0KUL|3?xc=7K-t>Hztf;QH8Q4njWSl~m=xn$NEZ(SYX(OLqjo?GbZ--ec)>se zN^Cs7NA<e|Dkwg@cQx-#`Co#<>2@lK&kQ_=B16|Xo9JHF^e~TSUlS*~&~x?RF(@By zX?BT9Gf?q+bNH4<BKnQQ>k<+yDLpg2ufxL5=-P=Squ;FvpB@7*e3bN=K3bpiITz*J zIcfSijU)CXV$Ir9F|ktdxaguO!%<~FSgGy^hc)-$Se4j5goKnx=hu4kV)#pJ;P49c zm;fn}J;;DRtek_1C%MODoygeqs5tpryh-ur(CpcgCO!@}z1wAYWWq<fe+$$&^LszA z5~lUKr-VjvJVRs22i=y!R+tyiTyr`v`M44Jm%!5NGuyu0pHCa^KaWb1uDZoWZL5Qo zUUr~V(xr@rvSX6GKfys)4&+giACr!<CxWI1xPxlGv&b3*lTam)?Cb~pC2&<?-DIVG zHMF8_b@0wu$)ye$^hPYlPNAqR^3d%s0o`zYAlc^OA*8s9CXdmVZe`)XqGelaN<&a_ zGU>pDr@*~&-of!O_cmiFGnO}YlA}N|X6PIgrw$agOoXF@Bxv6c;_%0QM;6BBPUEN9 zPM?(M_f6(1^=YGOyuVn~R%ja5>Qtf}n*M~|REDxDn7ymS*ItJeDa$Tw1f85KzOHNA z3emoRc62vlvrtxF=450*iJ7p%#Dnr}`ZX>VUQtH?K+^@;g)uf}K+(sJQ7DP0<RaZ6 zk2TL*+)uc%%JOq(tqyqZLb<IFpd|D}!RN=!PfZhvmzCKD^9dmX?bpI@E{nORC(fpC z!`A;2h!pSiZd3?(##vJu^G1nqoqH0$`<~CHm6SEx%0Fi_Ef!-XeO7K-RDQ`DGbqZP zMpopLTW#u<#iXEL;zhEN7p}qGou}eB?EXV$Tmpqkj*pNDtSxl^1O2(z?P8L+$JMPW zH1|jT<hJVxCS^Q%J`h(wJT|zh3T43!=h2^lTW5iJ$GyWsG2%q!(r1l~0!&ooooV5G ztkYM;byel&3ZO3CY_&&xNDnt@{GV>|?Q9*|^DmfSitIW6mMK(_Y|9njrq{;!>{0+l zNe({3a{u_kY3VM8t+gDkBo**2AZ`3#0<GGs=RbX!R4Bcl*yQ@)5<fz$1ut@1;Wkpz z<3f1AMw&5~!=|HQESfcU=-rTC`b00Glff{<wN+$;H?M@2lccCB9TR7$8>wVhGS<}k zRL7}0d?@tR;PX)9L6O9wcpmN2UjlX<FaiB$w(O#@fLD72?@zTf?|?traOHKO(R+f+ zcTSgig^j4Y;nZW?PFyF$U1ES_aZZ=I=&Rv4mV8QP#HOavoS?0R`kPVUw;Dcp4D>`J zPj%Q6biCQZe368#9{FPu>h}x4#6BeS@#tt@MHRrm_o2S?`qR5jTlc0SwRh)SQqaO8 z>|x93W+<OyF!kk-X1uM&Rr1!ccsTv#^6mKmP*jG4{z_eXfWdNsX0D7+H-8*ca*E4! z8IAa8lx&FL$*eTNX7D^||4Xn_`FRsOkSwPB%VF~Ef>@v5%A}H6F#lfJXR@v4dH--x z{u*0xIq$wVA9mSy0keD~AB|GR(aE!6v{Kr9IJD}GSUwviryRD-Mm#C*c*QZY@3^R2 zcPPGLqrU=Ho;W`#^IO$s1}m^JIWuqSZ?q}Ok|%z<%xHEA{7W!v<L2DR@RwjrmCdUf zrw~$DWUev_3=*5I>LpdaG@wYqpe(n*HY%25-(O$O3{NsLQjo;Bw{x5V3uaJk9Ba*p z%tVv!e-js-dON-^0(P8!#}CW%Q9I+moS!V(j16JtqFFjF%~mge&|j8u*V-R{FRT9J zzA}1QS#+ilZlG88Zw=S$U?+MM`DMxDY;DHxCu2g<=qngm5h>}@K5D*=KPOmSKd&T4 zI#SyAM<4D$ca>3sOZGFC@+$%*Giq%srf2acZ2&9xnf1h<MXBC0<r{k3F_`P$&XKew zKVLUhgLf3^FAs`_qYh#?jgXEy@w=dS;jn{Z25`BQC<8JzS~E~2DP<2+HdW`C`*})B zkfDfy+s8C_yGYfbrQ(m9f_}cYfzj-g@pF*0-LuUwiK$JBMo7WvLQwE;?L$yaKIXxJ zHIMghf{a&zSk9mi+G4d89?B$;lsQ=-GtIe9g=lV~DS!EwfM#vYez&@WI=8p1D$W4e zNByBcZ<mt^!{szCbo0vL%!KLg#NDcsF;%^kQR!5UlPpM33a{GlO<30WhF(&^#$?<{ zC&t(-o}mnEr9>8u{-b&x=W73H-U*X#5Tn(P!T236>9LgGh%hMsVz{mk+U4769>qjB zvzd4an$2!sNr+0pTVc*d^au6cJT6ai3n;%6GfFuE!I!WU+@O2d@<>=C1d$jPtdy{q zwqj7b{Hwlu(NTN6$G};qjEbj#Y9kr>n{6WRYWjM!_UFepiTKYu&%=84{48mO9gmTi zoPqAQm5}2S8a68GC&U@*Qugn7V>)3smRDg$cAGz&n?KnT*+>LHvjdKSQsc%+IW4rm z?%wB?b902J<9!Su7)MPQgDP8N<r4mKLJ;~<^L71C7E}``tiVDgl!=eNqRfM3<c47- zpr|s&Dbpe{DF-xk7RHf?KmsqI(&*&5Hb%gvhFcH@e8?!kZ6fmvN$JEkpBN*k?jWW7 zEZ#L`#IMpHjPq8?iE}lUif)ui#WO@G7!WE75S@f78XXrQ*Tp~pnGW4rf%o<xw;1so zx`o8$q@ph^4tlwz(cclHD>lgx`sp}|L?dK`ltYzi^5(~!a@d<DYk}#_6NBO8(aJz3 zhES0&SzkstlXMhGi7;iYGvf;JHLO;G+c}6zaA(+lj4Dzcz$V<(IOd$K@xDLKj(+kP z#j-SiAb+4krAF^dpQzREQnBy=**hxlaKAe*qkLac(y!NVc6dIJOoG;ES4<{4buPQj z;dl`9y{M|Bf~%(XUG?5@e&9)gE|vsv&5<=go`#@Sp&z>zkRE>Lm}?jlaA4>L<Q-1D zOo?X1EQ88_0>*bel5jmWbUDMe3jqdZ=_tp;xnVP2(K2Dv^RB>@`jydw&cS_7bbAHv zfJQ1riIIx7M7SaE4eUzJXP+-`M2|T4G7Le2IEo&pzYKGWlJQD<Kg6p{G<*H|u{Xja z#V}%i6>~k-6L02-wJ1~3mfQ$$>#cSi-plwh`uyckTe6gt7#5_N!l_*mBqb!<(rSw7 z&0JB@fLu`*tCS7#>XA>luVaXiT{iCPVz^5`cOcO_Mr_>c&O_$J!`0c0w$%_F>%eOs zM$56k1b0v7+Mw_-ixh)RpX0KQ*5Q=S;kR+c3tuqu56(^v3Qc$H$xL0#btCjx1~Mm# zX8jo`79Dh(o<WjwClfL`GF5Nx@;|6_ODo1vOA^VD5~cmU44|m(bTNw&?;hPk-F)_- zg_+f7bYzJ;REfW>9*Awtlx{=xkrw<InsZ!@Ek^}d#Iu-Yd9cZ!mT-Kr{UzE^rlKg8 z=#Cx~HS9!1pW8HlqK_VuFsTx1#lDXW=C=7HkR+pf(I}zJe{M$|-2Hvzs8Y08YluIW zQ3~EgzL~r(_oql#K1iTS#PB#L>UF?zZqG-BXhX-|Bpq5z{QEF>Qx0!n!rrGzVz(@o zegV8@PGaQiPIv5Yqh+}B(d72NNm@iF#tu^k>cN4R(h}h%2EO)OISjKAjNYqS9w3kz z+!GF!ytD<5LeBiDzU6b|;&k1AaE^vaBt6BeY9uj!&rk}H{<7gGqQz=OM|zA9WjH9i zY7z+=-Rt3CWZ(~b<8Eh!5R>PTeI0<5sgU-KyI2@mT-5cnYABF!Y3#T+?`Z?8u8kY( zrLq#o(hNxmO)1C@NdG0M0wrVO^+*;+Gyc3E<P4gLa<8Q;rXNkqQ_A^iBVp83pV^t- z+r+EuK{<Ma_W-OwPi%012|$3F5zK--YAMgte!sAMdt4kNWpp#7?(kd1;z{r!{Sf!4 zfkqif!a~@_@zZ?GT*;H4ASqmgTrK%hb_fqKS?usH%_AH51qxK)PgYf-^9P&b<JD!F z^;@)&Q6a^DVyghc+1%-9K@tO`yiI%qJOfw44|xMDqH>7oN9mX-%*ucHrDy5opW@&6 zIIjMe^GM^lT6ORl^TB#9BPqC>gABpr^1))kCM@9C>7%v8rNl~0U8bX5@NkCqF)l`j z{=K8P51Qks(*Zy!C9wR5x82QV^h+Szzxi2$N00Bo5!6~F%T8P$n=xl!tG??XJP1?Y zNZIC)Wcz4e(@-Dr^hWQX0u4~fD^^@|Il0X}9GGnrHi+X$AG}1|&=IqCg7c)2QIc2t z$v2d%bdk-xAQk=ytD~lQ{lQlF=+CRWD;}s*^CT*<IOobnMUeQ|?3RvfA$XXY5B0~a zw-Mn!`6a<#u<OqKFiZw$z!+RNhF51J7JX&YB<iRG;J@W*pWatpfZ9D&q-3Ku$iIaM zX@gYXe5o$sFIV5ZPHdVWTVW$w%D)T7I9Sm4rWLzl1Be*NO?O-~u&}#JQGejWp`up! zfWBVp;D2{64ABw=Cxfn?EoB0wL~a@<S6|CA)*aniQr^C<y7ZIt%PUx72Ee}g&0g>l zrn&5Q#4C#w7{_OZsq*@vIenk5`Z&s=0VqPky^D%B&cW%n8bHYn6-e#j*=mZ&I9ZA` zVpb7JQ-qPn4t!6TyYae&gS1YJ=}5g1jSRvSXanjJYJck`voz$sr`rICab~j}K}su5 zq=(ENMe=8R{Uy+7WY7?4*Jfyvf>%PhvUxg$v`B#78hPL{POQo!J(9aTx8e0nl<8q` zPH)m{%;!h2ekZS|yr%wgI}@FLzqM?j;itl0LswF|ELASJ25}>5!R>^ir!f}!Sv7X{ zWC^Mt;?6>pyX^HcFOkYyXF4ks;CvaAbrIrYEn}ByCK(Bayr3}q#wPmT+jCegl1eYl z-<g+rJk)3AYS=IC`MmGL#C>8eM<$FRNi=wx1C(JD7gh+bi@m88TKQ#{f4ZM^3<k*X z4e3W&L}ETMaM`v+I87#F3P)Kzb$~SJ$18iGc5y&u;dX^<ULA3i<)w`*BG{|HN&2bD zA#!^2mt7ve`gf*nRP@i3eLB*h7^z^z&I{vBr!gzm{D?<U=;-fDnah9jvJ<bEQ{>lC zSSS!dk5O$s&W;a#17Xh=C6Bq#av$FLoDjd$sd?();6T2N=7wW#pgc#5`C-NsEm)nH zsZHpKDl=#2NPLLjoUI?}Rkn;INQ<t=;mC3G`R(%b2G6mQI+IAQ#cY)L@h5=-DsG!l zDfkTLhTm=mgXkbNhF(j##k2<lwy%`Q7EK+ic*D@Zb`>AVh*xo`CYZE1_d~{OXb9&Y z_n$Or>JI!7M@PLmharvhy`K%D!13oPxG_4i8xE53y$9kxW89zEh#H0W!u?fdE&&qW ziD^Ze*T|r|!AKI2guxv}$8}c)`@aO;|EqnyM?px={+#2*eM)gdH7f7_;pXlLJk@(2 z`-w(h-M6C6>HEd4+L!LFL0TRv@?7l!Mf{v03L;uJ`y(Fwtq%W~zW^bO{4rw1l5JCn zPfnOWNCT&cJv(F*PHjbrHm8HmPT@04u0$vSrPjX$z#!CX-lEl^6{6402RhF3nldHB zjv0=e75`oa^&Oe94yN;Jx5z1{9Y#HwQ3O#G{1lSW;(l*_(&%UfOCObIceEnvgCL1m z<NiF5Q6kSfFdIG9-DFyB;Ld<`otYI=hO!QS`1zQ7t2qb-yo#TGq$T^8pyN8EMC1WE z@T=##*aM0nE}o!6PS5u&TL1{?$plQsaqYchLO~yGVrm0RS0Cr2nEGhHuznBD7KW3l zz4_$v$B3sb3<yXPYx&Dqmx0@~2Puza2^}+>VFhEw``r$X85xFJ2l_;DEvUX5)R2ez zkD)EyLiS7f5Zl_m<g*^96D{to_|Vjl;&O6f$`&r&bS2v*!oH=)UAJ%f^b{<wdswR) zpBx1Duq+={tf3mo9P-??Pv3P@$kp{4IIiONG$4xNI|qld(1CBYY<I-b*10?Ky;WAm zsO^Q*%!?Ssx{>AmcVGPDk?yCr<SAyC`unbdUI0NRZnGD)0)p3S^s|?!H?d4F6IngJ z)=~)`tA6Y8r=EMrW2KyT5X#ygH02{Ue7j4R<`Ps}svp1+VM_i2J?$n+OiQkIfApy> z=K@>I@-d`mu~jq*a<(xo7&k<n`eLT0B(^+jj-gSyl5ah<*zY7nqL%GQ3su5QGep$b z<RPIYuV{jSE^+TF*lAb8SRK7B2L8yWb7f50^nUs3ncGcPIW%L#N+u--qnR_>J>f2` zIYoM>`v8TlbB7xxf;*a76;_<H#?#KJiJ#iMynZ&#z<b<4k^n4yE6Xh!<yW-j`NhsV zkv-Cii2a<av?zlQx~F`kMz1d%a2c*S>32)Tn$rFoMbx?xJGI4O8<B|gQw;AX>T_uQ zl(VX+?4^;>{Om+;CNnkGPlOC1r!1lWRCh0lzjE?hiP}DN7l6VES590ZBn&zcu8^s! zOuQ{00<Io34cVm(YbAR;x2Zl8bzEFGM)q#!2j+{$Q}sRl+`g@!HwSfLv(XqY4Q62` zR13xFUBZztgq+cUylhw2KlS&2d&mPzWGyFu5$m5Yxhdacm$PJ^u0`HbNC)|O>%R!r zc=ja~^z?DNcR<4DK8v?RD#X~bdDG&m>KQbz(5H;w@7_d3rI;)|u`LBhcCtY0J#qTe z=ih*w>`?MFa8{lzw7Ss3Xl;{a2&Sd|5eNo8?z3t)-K9s3iC*jU!~<cjSv7K0+$UrV zG>gxEs-tB--r$9dg#{fmn@Q3;^80;4Xg#NUqBvfe)sP>Y3DbPOgADFF$RPZW&Hta0 z`Twbxzei3%$j<Rxobvt)H7cW5|BD%f|6#`0aq4;Vj&|^<|Em;bu}NmbdHxW4U{Z?4 znGXUrlmL_KWrjGwa>_tpHw4#1YtxxuHQulUH{sBYA2!^E6A5(Dt>L_3<E-sA0(X3( zSByk!SyVVlxPdhmu*zZtbuzlVGJ!46TpvIIKxz|OVf&=!2nEWlCh}o1EBfns@dOPq z9^e3@D%GurxsqGsSj)!rvFa!rQF(jkmAuub_}InRXVm2!{XiXtgi2A<c?j-UbM$T{ zfx=AeNf=F8Cd4PD#^>7ddgekshMU{8d3YlXs3Qv3qOQEQtF|SpK{WQX8b*^6KLtsJ z<$708n|D;4sr;&4Kr~iKaT``tTN!DNWPd7Als9a3;CHpKX0r`!uyBsX!*ck;+!3c0 zIkUrUduWv**|vk?pQcfX(Q~HqoxLs0HvGLS2S%_xEG%w6koC|oisQtv%^|jXN!WeV z0=TykkGF0fyIW+$`pwbDGlY5+58N%X#%jqtXnD@Q!V2MM1a!{>ns#;S-c2Qe3RT80 zlqpKgo_{)@v%=zP=;%lXFwe+)6B2W9pA1GZumogGn-%uVX1+_;8Uu8VCOR9BMfSD) znLcIQ4J{dIvuey~NC;I)$l<rPP^Zn?Fm*_@9zh&+ufMbTF;0bleP*k|1{|PIe03pG z%xRNA#jKgGlcDsfyHF|cb%_o?yvEjyRz{q@F*@#K;tiwo7{IV{I|U;XE`A}N5{TS; z-QCOY>TT^UcWriQc--=Be2z_alpfKzqiokfH;b{&R?$v`^-^zU3=W?lZf!_V&AC?? zaM{)sW3hrA*Pcl@%{s3006bDQNe3{Ow#}Oa>QLKojvsuAR}xjthrEu8PLzg`Y1|#; zDNEds&sI|*bs9W%1sHd<O8xLpldN^vP)@@MKQf*g`Z4*b%I9cILhqV*V|`k-f@RyA z*6+YE@{aLH#{}WO1anNIxwSZ76XO_XfM&jkn+~<;*w<)Obc?wvddlMQ%vwnbtE{`T zf|Xpnpzn~Rv{gebHOJFm!o7b9_%?5m`Oo`40e1mFW&Ua_$&;Di^Y&&39k!W{Y5%lu zd513Mtw?(E*B;t>`8QC%hJ=V<!{V|buo6?7(8WuMkr7{CTUnuAfZ$Nv_d7Q=4T6NU z%hFn_q#(9z@vw8JnAkXLyOGzQfnMLe@!t=yu$<YlS$v@ca-+3#yl((ty$&2Zut~5g zkvjTIfO&(#owdwXes98c<}0l=BV)wRszXIvIrQ{g0$F>1i1Jt0=$_dh+0bb=J7dml zP~VftDk9>I9BA9BkY=J5-9|t!<HXb=*37U>Q}NwDBJm9Acx%yGj9-Y6mAri^Djq?{ ztRsnFlbBgj$Bf~$m9hqFel;Ag8~stHduG)jF^KRMAtlu#)h@ue8JXaXKdaqF!&?of z{o!t!)TXL4K5d3;bk6S_b~RLDTk_?_Ra*`|t|hqu0YAVE=GC6b)|3r)nn$;6lV2K` zIr=wjT5t|n#KH9!!_;$=GfwniSs%bj5DQREjmNwXFLq0_Zj~}`s%*9997nEZMkhB# z`iOGz-)4PWX}^7{n|kO18!Aq*Slv0eFc!4zO^p5*F+eR2ANsnye2yBwu_z-SA~HIV zfwK1Yg1E5ne^p)8G4dlg+iDuv+~(#c$;<khMVpwHaKUBRvDuxN*k1T0owA^?dmUwC z46kGT=~?lGO^7s6^A^OxXJ*O1sz@-L5(l8~!8IrgImtu)!gDIMt%Yq8?r$Muq*Thg zGebnah^)Uk1;J=J0MN|(0SXaIjCF|Itq%4Holmk(iUCJJyHa9dB}X2e9EWI(bQO}m z+a}0v!q&r}BG550wo+6gK2g?ZF`gksXTbyL=abOu*3#F)fsX@eQ-BnktC2DBCAjW4 zWf*PT?YP8|?bC`x=p6lsL-fqW9nMRV6WqIhpYY*>yY|8T|HXL<4nlHqN_I{)L!(#s zpG&-mq)Kb%dg=W@(%69-(f5CzaUZD?;^L7FA2gV!HaRKz!0`qtt25bZ4p<3w2yHc2 zS%nlEN3Rw60&f16*q{;Fkos=h#Z=vF8h@=WVoM3`wg{{+o!hJ0TF|IkFf&uKHN9fv zR&l(J9r*z*(`)_lmmtY*-$aX3;Va39R;;E{0|G2pq1#MD%qgasc11592r#HtPt|%v zRACTb^6+`Tik6m~i(WBF9_?69<AAu}eo&h-$IO6$9D|Gksi}3>F@Q*kUi{#BwP5CF zXA^RTe7NQh@Yi$$-&->><K|;#Zw2+ak&GDf5QHx1$6{m(*V-tSn<!rFHtGjl7ZL+# zj!b*3qRs~%t)W<)s`8OD4M{vmVBfNB(D~Iv<tWW+pva!qMrAqD%W9bah(SQog?%cE zcWUY#@&!(nhuY))yDN&=R;%ZEs*%$&j=ZxS5ou}YDn4eC#EWsVbfcN?Hw|xv2l72+ z{=7H)rV%Po@n>FPGcetBsAbmsaav8}g6>xj{?~N}qcxA{{>2$4q)~*@*t$|?{>gXg zCrP;VT=h}+i>=kCufz@3GIR_MwHbRmcdd!#(nRZTP*WxGmeYuE@tQi?kLGfErR!6N z8t4L{<la`YK`azKjOHU1)Fxka1S_>`Sh}ppxDq?Iv=1`bBW!u*)6ztqqKJ9160#0u zbClNwQC23-z9@S3spXG1e?o&L;b!e(L^_qj((O-Nf8>~9c}w&&^q}#2r_I-oNXTQ9 z^EiHmWnT4GFaT8_MGF|vL2c>MW~DL(%S^KuCOu9hoUpBVxYxyl%x1h32UBAfBL%cs zG#QVI2kBoe==l#3M?H5em>R)fu{(mLdQz)cv?Gcls_@9~z>2j@&`6fgnz7V})+Unl ztpyV@ZTi;HtpU<`XU8XRT`8w4&&(zRtFBYDSWbeBjSREY$w&K>1C6?)av6^UO#h_d z8@of<=Fe&k`fd~i?f-2HdEft+AOjPzdZd!6die@8Ted*F<zSXrTgdNCWyE6e*qg=> z`sj&KS)Ly8sPgBe3hM8r8KevBS)3#_w|mKLwYhR1BuswF#GdGB@R=2ak^7%bzY7=U zNceV{i=TD4v`}$>(|tQl0~WXrs?K=Fv`tig$wqr2KFgl<Ty2s(yFJjGLGYZ$Lj9Yw z>WQ+Jokl<X8b6Gr;&{IFvPLRROEC}VtZJ~ZVZd8n7gd?L<$A$BbfV4EGS}>q;$`;W zeb4*#!Ptiy6~_x4#HN7GQP%#dNF|R0$G}L8t;qV9yyt^rUrV45YN*%aEWcxE3mhBd ziFrN8!%e>(e1wJyx=#brshp{qiM+Kh<UYGe=xxk=<N@xyHGMID0vMHJc`j|KWETj= z6$ygX=3P~Nd(CIw`7$1Y_k^EBeH%c~YPOd%ds-y)$rkYUvVuF(K{^tS^Icma{;$Y{ znhj1&!Dte9Z|WoEkD^#jIZyly-%3%2BSO53NR7mE7Fi_@ueP$dFG{3XdZm{fn`T`8 z3U2{O_!(&LvJ}v?Y}K3S<vpoYpb!RXCDUJ1srnK0!<(y6=of<wdTHgCS9p7nNgo4) zCYK__sTlqF4iYwwe>tn{-+&k=6s*W(U^Ff*h^E=-U4yTQH|D?ANVPg9kDY;hvGcbe z)8FpJUu>85U;ODn?FOV+92;$Z#ybA8EC7$5_Yi$-T_{>{+bCbqnEUlD{gK|!AD^%* ztA7a&yGiXzwiN*3*=v6Z-t77!R+_eoGj9jNd5tFhcJsYlKfgh(>)rMURDM)o#9uaE z*gQ)wlK#}5Uq60qlXRf0+5rw#U4U^OdOR(*8?UlUnsGCjzVJ#eT`F-^NiKFtInXqK zO=?a5Ce8G_@M}^%T)zWrKJx#P@;mvTy!`)yHMzK&5&J9e$TUQA-*e3I(f_TpQRR56 zL2tQ39{s9<)IC6sd_%&<(*3y$C(%GKe*snhXk-XI>qw+o8+qHkN5T@=u*dT^%=P4v z@!Y!NRax>;J=_6O3g~ry)Q7=jOF!BN<wPKXX!k9u(NvU^_avnqp%&<ovSxLfc)j(e z8>hoS<ae@yie_RX=J!#wzQEMK1QbO8r?e9@p8QW2oRRK&@hguLXXeL}Ufb~rJ$4`w z(@2!Dp?V%C0U_j%GZSB>CE|Q2X?W_@EVXqK6RrC4uCNBf>msP}@Ws3)z=p(a#4J<S zQkf{kJ=EGguoQyr63Mu4_4B}CTM??cnNjx>-jL~P%?B4rlOSZ~XI~?y+gi;?+a`A% ze-!N{PSscAJFCs`5y_cEnl6PEeXsU}W27RI6?0#j$$e}2=sUHMHT{R)3@X3pXD_n3 zAI0Baj_eY0?AIhsy@(sze=Nz}%EZOOw}p~oB4ngIHZ<fFE5uf^Cz8CoZ~mc>+?w2# z@&WQy%CikQq6<YGjhO(!K`mVl{cqdg^$I`pd&@815{t2<ktKo$Ga`4v5i6NmMo|)8 zxh4Uevj`T`B$;Y4^r(k(b7>>kad!1u9tEcorf6<>t^I?VOl44KjI!BK?LJ_vwBl)x z-v`KnfQBio-jXLXb&>HY07Cmhk3>Ijjvi})eHxJVX|}Hd{PV3w8{s6Uh2w{h#P=v` zbrg++TjgJt#_X!;AHBD0d@_HJki{XdBEI!;tfP$KAcl~g$Kv07x$@H2{i%yuo)o2( zN1dWf_K)VJ=(y88&<|e;QKUcTR+5sTk>Kcg8ieyS_{Wm*dn&v?0Q*A);QW9&c@=}= zz9o;3m=}cUG#6P5&A&_)-U)>AsAeka=eoTt<%EIw%;-!XHO5M8++ZXfb9my|^&f{% zAal|BQBS@Eafq3>s(Z*&)&2g?)HOP!7|_qRD3W3ZKS+BB5HZxt&+5_AAW{>16czKr z5Wx9rqg{kpJ&nP*5Idw5EHE;7Ujj6gl&4IbRNSoc6vg<uBC#+*CUw}S8#*<prO2)m zC-!`-uk>~Fv)98fFZT5xA@T8PMXjRLF$&<>*2!8Fw*@&n7fH0x5;rB-#T`*9F4Z5h z+%9yW`>sJ}`C=WZtgSc2Ni_N}ZIfh^gn=aTLH(=hIQqz#K9bUz7jGHI+6J2+`q>iO z!)22C*uKSA*jH!pEhAgW=VYE37Gyg(WCJxC+*42t=Io#efX(LAFYf0xVD$@T^LM2O zIuZ00KOCz*s@LkglK%0`vA=1QPVW9;Zg#c0O^JGqUTTN~q><f?3L*Z@r<g|d!Q#{J zJyKFi%&z3~uerFtrA6`mCAhz!=%CxEOqrVF*qfUOauQmx(8XMf0hU3r#O@H|REGGG z_0(u}dGee1Y<bc~6KZnuYcA#z!%1-|q`PUYz_)i+wA7fYBaVzPN>wOwc6s<A?b1w4 zwax|AkY#liWuKB1yDrzi(?Kqg@4c&(oYHz2<AexFHP}+#Hh+*OiHOQ%K7hI8XRoV? z#~k?5rxiT$y?#1?X+9yoU{?PlX|#GR1%tM7R}%Bo$9;<m(<u4Yc?jAJp?FNm9yaGA zULBhh*)sF5PGP{CcQUS2js|a>39)p|OeRp{13N5Fhohku7$Y0MNY$UH6~Q@H@2Kk? z!#ju`*?IS(Q2%kJjuo{xCwmH!ri5+6AF1VbVV<GfuOqJFE)pE22BxX=?NnrOW1NP= zpWo8plYPx;x!fGD^_mruOr9_{q-l?o5Tv$NK{<8CxBk$_g+5!(IeD}Zp!kp)LRvj< zK<=!Ld^nnzZU*5N_DvzA$|fou8PP5N|EPNJcQ)Mc?caz9f+SXKvDHfKRWtUeRhvqJ z(xO(aqD4dyBX&@=OG|52jSeIBD6O_AZK%~2MN5^o@5kr!e2?cizW>1e<8|HldA`o` zR>^g9!?N`Q*fBjAfIExn=gB(6C#|M1LSK#5m%Qs`bzWC?UQ1IQ=&hE4S%DV$GMOp& zmeS3KBrUszu7+A%Vs5KiSLfG~=pA8pP)&s81hBxC_*4HeJT-4)s9ro&X3?G|qpv@J z^nvD+sV27>8`Vs4c5|H#`XV|3D+K3TkbRGIY!H<qMW9N6q``IvXI3mA8{KU74|58C zIWdCA{+h~p#e-kl-heI^tUKotOu2+yP0Gqb`rkxW;O!h8dvPRh6COnCO9vJYI63g) zY>UNGq0z@N=?#GkaK1$nVTqQ~C={4s(Q(abhx~NgE|q*C-&{4h3C$`6q}{E_k{sC% zmS#>6m)D`G;nzL@LsET@)sVB#^vwJ$B3W(43%Q2a?9>z)8K7A6&gk1U{88dz_i)lJ zY#{-c7u%6<IXiXB8mJ5~*!uiD$8`sEr;#K6r;fH2wfcQqcbd|B!=~*kXvv2x4}1Du zxFWP!)912Rz%^nKJm}vCtwSvC4R}+Knw>gJ!Qc=~eXR}foc*UscJ^04y!2s)c#$$Q zmcqWMWtje{_TOww-MamnG%+>!`NSMgN`iYLOXoy1A?&%>wc?z-M~zrD9;OQlk2`+` zJrp2^Q7?VK3aOlmotQayrsw4CzqUn3NQ9ZNEKKiwPOAVKQZ61MnE1JxU$Gg-vH?g! z!7lrf(;R@g+BA>^e4Vk2+7_jb*!Te1>afsoaVk=9gzEB4kR6kkp|vGrH*JGWe=`V1 zPS={zZhi|io|Ys9DrPsJE>F)rr3MD^`SpT~z7;|lkW1^oRuCz$>(><OYJcjExkvc5 zXTXdcqV*e19RVVD*HT#6*~rg4BskRLAXb8;CSi$itR7nyfSqICzyXJ0oQq>rd8Y<h zl=9BGnRk?I(W3*XsLSwRZq=~LO@7N8iIu;UUoyAER^(b8cx^atDxY_0R0iw;wKM8H zTV>(<Gd6cp5^g3{otP8vaHzLwo|j^g+8H>N{T5#mfX6&*p)KG<(+aVrP^_c8)-bbZ z^5xo^>kJKKePFYEYFe9|#d1iQgg}$<>aRi}hsBH~O|(LGo7mEknw4F@-i21H^>9N6 z*n|%(kV{Jui!40e(Q1fUf_<75M4nx>NLEYt7`pk%NO;-AEn=kgZg8gK<X@HxShTLi z5y%uAD_bi`-i{57RmWY<WF^e3;0|PEQUjb(wY(=hvu~=aWYgv@Aq4RRZ;roOg0#0M zk7WEoopK#(011qA%4=7!*M<>D5U;&ad~D@!_JbzQ`o22TwOaUo-AFJEcd^>^$^<s% zWfis&mLb>9T7$mfCUoD$PMkxc2xFF34Md@?!v_bEHg2Di)iC!#r3<KbxFr$b1%Dzk zKX#g*msW>1BAI=gU0;DO+Bpd<HUvp3Qvu!!wXrhX*BnKffpxE!snotfb`v#PxS7ME zx-pK;_C;FN!%tQU_=rk2G8J`^gFoNoOTN%--%qIEx_SR4`U?Ui5ia)hlvrtH)<rHF zVZiMxb=^x-IBz5+IRsovGi6<95v05@zkpX}T*MXs;dsbOG|u2iWVvofX5=MuS+ZVA zgYmWo46iSVC`MQ!vbV#I(@PLvy6!K^YoBsoFX>b}j!N?YS-2Zd2+kcyBE-{h5<qSn z$O=0FQb{MrEjARM0a3W2H&(+$ZUgz#%5I5Z^9X<MI?Ip?{4|_DrNk&uyMYf1UqNJF z-?OM{&JIL8+z)~nJ@Y;{&4t)2salBlI)7NyA6tT^Uo9*=WsVR*=VVr4gh5_hf_5;y z$5ao&VKkRy?6nAfJ+lv7R0>9d=?O$?fsAgRUQfGp9sa2!N1C>Df(@4>X19m^g@{Sw zQB85FMW3tXFU{$|_1Nb)g5R{}ZKumCc)<k69LE1(7a}2+illWrwag6DYJ3K5=tO+~ z4I`&;X6vs)5gAmOU<Oj!*v3qH&bMU_DlP*Qh?=_OY_%*&-BJ+!mhvO)C-E8|WA}E2 z5lXFXkvl!0z}gY*_^vtV_8EXMiyyvE-d`W-Xk!UZn`*%CwysMm6-v0$;GVdKg?q*t zF$iXd7H>d<H2ektq`{ss{Fs?>Ux8LywNAo!v`5Cnm@N^%lb3km`Kh;=#^4#34)Kp( z;Om41u~gI9rz1KzW8+p0ciznq^18i!V3sli0Qd=1uuxDwyY>P8R`u~MAx!<BR3GJ? z0t@TyXy2>o{Wg7W>+P>N2l6u`eo13a6-PyOkQ;6i@{Y@|R|+06D0P=wm9kz{3h^XQ zU#_kHgq7rH3>3(=%pj&%K-<j<OCXvuUl^U}D>5TFjE5AnVNj!2*1Yh}wlEb-6|BUD zdNvU-Ahnz}Yh6uqKE9cj_lk#bg2;X4N(>@Segqv@^axpq8POXdFCg8AEoW=*vjUf^ zkWKx&mcKHyv^5r)CB+G4!kppybB%)7Ck+r!6_vooB>~7Q?+hm8C83_@C|#^1o~oGM z7&IVhD6O^aGuXHjiinkoy=JknP%2d<nIh(<PD@3sroe66|H$_Kp%1)Sajx)^qY4Ff z%yu-n^Yc<X1zOlYQraF_r1(4PTiRwHgoW91T0D`aeptzlR3vEh0j|V)bDRl6w!^;^ z_>A&O5{Jn`K&8fA@+_kJl!Zs~uAo4yn9+l&{dbnK*6=@o5vtfnmL$Gvu{$+<{Xa#g z$jd$>J$RKhsbWZCMbnvoao%0GOll`N+YVVEc}XTvd1gDm%h<_5s(ne4T_rx_QlO*Z zXY+4ZO+r<CORn=Mysr+g?*hNyLKLJ~=RdbZd+UmZ*+=>O@{=%D8fk5P&rAbJyNGRL zEhHGxlKA(0#n;pZZHzi0|Ir!E_*!1<Amf8LU!2ElSlM5Hu`C?_XtIRWE);|X+cd#9 zR2gX8a)Y$QVnHRk9!_!}_ELt#4qC^=QmV^3m?-rsH0#+bj71_p=PAFSz$2;+KGhLC zKeBU+Gw^=O#Gi^E&9g=gD1HR1po-Zt9|SG=fKMvd8_I}#TJ7j_kqwXTGTym5z(xkX zFxCzxG$-We>jv+j>$6kuW}0o`{C;HGdY~FoB(LqhDDAw`>KWeJjVs%BPN?y3IW%b- zn|MD)mcL}ItvvVPK#3s9-rxfq6k08RbH}vFJRX!Em~rA>t*=q~tYCnJ{D4cSkbs3~ zV-U?o^A=VsZPvz6ag40BB`6g7XqZqc_1fh4`|M00OrLAFq-)W?k!<AqHnacj$9HmE zCkDFMxV>&+c-&6>LKLdHL)IgylB%dStQN<6Z;_+SYCFDA`g`8`bvA@8Y5;8%+<7W$ zmo8{m7yPmG$w*==CbnprJ>Q}o%L#<avZfo4WAm?XuUcL7?R47`ZRYUjMnue}T^4r` z=X|+(wT9Qe>!-qVX=)kiL8O5F)_rvKLzAgW7HGBgP8#fP-W%Zo!F{&oPHp8_$g}#+ zadf7%KuqfihYw->*hEh5wh8YestnC+S1P|?^0{9-N;bTeYG-3)5iyM}mQ)C<$xqwn z_)v^M+cu(~x3!K)0Oq|a_La8_W&h+acN!4W$fwd@Xi3026A!I9%|J^dwv;(mm2r8S zOuVB0D`K#Jbn{2ePt_QT&9O4>FE!p0F{c%x>QXc+=_3;&Bg4jPAMZCgEt7Y0Q6M8= zP&5r37(G^<y^6{SEy32Mg^L@u;zK{+FGg{32jh1TcM&Fjmk0K)|KzMwx3<bQhv#Yh zrTJL9@Fq8zarhd^uv+S}C3_(_qDIb!|7=xvY+sziX=rU*r1GGMPmSv`y0|o=kEKT< z12cch%ecYI0XfPU{06+qmWtaeQlL=%afZ)}TtC5^0S%kQfF5k+u%!OzdWL9q1K$t= z9X`p^CN><gPrFm1#d<dvH0z|u)x>$d1~DGQ{Yi{SL1892Ue?w^_pikRPJ;?$HllC; zD57-{v>Q7FBZzu@72{BXw5682h4l^7f1nHKid?I4=ch^djn&3H)jrs|otf6`5_cg- zR-XI^-hIiczRJ8mEN+eJYKFgYj+qW}R2C)EKBz;kzbF|j>GCh^A+M=#x$(7}K92eO z=v>+2(7_@=R{{F5-3*g~n%VwX7QzL*ji~{N;b3-bjP}7!U524KX5o^Cf0{RV@Y<z# zb=pFs<X5}t&w)2b3~l5!4D%`7YTYLH+r7LYWVE_*JZCY)#k`}Pw}Ft~O}1F~=*C%H zWW$PuYa1saM{Lz3Y!tIGoPPlx$|*s`Yh{{Z`@m;F!*-loEQGRN#po%)4J;qXhU^k? zupc!l=|XDw7I(6p9~|ZvwI-OQEhfx5mR!~l@T`$5S&N{9A19TTvs*-GWJ0VE!#nP_ z7hy+aY%o3>I(%$%6C44KZLVM4H!QpTj^9l7@bLy0*kY)3zZyoom}W0-1b`JQk(s<$ znCO<6*28?0A1u6AND;K5p+f{kWv^YSX>3P}5JMK`9HqwnCLF2@lQm_1TsW7sOn7XZ z|FVn4%aZ-})hsWFG|szfH;BtM+`~CZH@gW;wLL6ac#_In<G@Y>(B4UFXdv%mqEeK( zNh!v|>@+Keuu6Bei_Z=+(C|_2YSu*-Ol``Xl6hj9B(j&>Sm@?I0Q&%Qn>T#TRt(6S zL(erMZgJ1o1P-$#Uk-~v{KK+ff&iPwvJ0KzHaqz<2taH(Oj5E2UiQeqjVK3>KLEQ0 zTTnAd7Q?Y1MouL_jT`>2U|Y*}$rtfK-%d4=(OM!Z1^};UYdb<%7)->A%L)kJ%`|#| zv@B<52MBN|6xvj0>%Nh$%4p41p<0KE;x<xE8437XCjZf427m}CGd;`6DR=IdW8GMF z``>yR<~Lx*@G5&dki%toS(T@jn}q=HAXy&o!PD<JG6Ph9#{7lrPCh=lwAB@Ni77(u zg7iQW+mD*qL&CmfGFyI-1_wo76wUt^b)Hf&!oU0`!bS$AikE&A>sT;dy;bbPC6!`7 zRN%m!0pNqib}Ip5VzC%ZH`eUFhET4tiymr|!N9!-VOFW>D3&+pwU$4G+)0JEDFJl+ zf;|*RG@C=!Gy>x+`#;al)5^Xx_DrTP4Hy|!6hO=VMj8HD0jbDZj38LZDG1;F^eG1; z=Q7{!RsWQT$v(+)5g-=8>z3DQwz=jIg$m^VV_L+Rk)c5-<cysyQyjq0+W?IKVS21# zSY>ilIE>68trDy~YiG&*f>51B6a0@3A1Xqn$vtD6$9!~{6_w3cFBo#85{(ex2mHg8 zWKgI(S}o9w$s{Vsk6YI5)>tUBkZjZhFM3YOONbav*+wX18`O*fyY19&<qe7uK904+ z6s;t~GrE+dZS)xPGnn`h8pWNO9J{h3g!=%Hp?%j4>DR<|d9#s0F&j`Fd2Cszw%^B0 zhy&FoPRP`4>+!2FlrIopZPXL=)gU)@Mq$xP_HPa^F`=S@5$gpUS&05QhYdc)S_^^d z84EQ8z8R#Rx!Bg#;28E(;m)rdKjNja*;Wf85~&U+vMRtxtbk(Ykb|rQ2!!m5Ne#;i zUQ^6Aaa*2po|})9J?HhPB#U_!bnW_Nbw$cGNvW@5VGgY9<tFUeQKQ5zUG@ny(h9Jh zH3-2U<h%L3^WY4}@MHzBh6RURTpcS6bnp{IG<LD+@zxYdil<LVE2Is`88I`!-iSG7 zA(qh&-LIpAQlcW*K~5qC?DTDE<~AUHPV|!4DS#Ag=4UtArciqw5DgW7Q);nJyQMZY zlk$((zms&4OOxWO1F{kkLx~HE{hYJF6Dz5xcJxqxr{C-}3;kFSYz_7XK)mZq5eJrr z28L{N2}nr_<UuLM3_WOz2^MJ6BSj8mI87$!F@4V?7mCLa&V=-r{YU3Pl&1QC?-R;5 z;Y#4qxx#g(uhJqIt2uOqzWQ9?{@+T*^V}&N9mH`l1Ze!jE&r3^Qr-LG3pEyzAr@!v zf_LOTMsBW(hMdS{FTY|{qHR&}cOxI+4bnX$!yeu6`m5qiLA;2_SjnL-#OZxQgmB9J zlP>R!b1(r(sQyQ{R#K~4OMVY5Q2foyoO~rK=H}rK(S!X1?)IqWX$?jBIH4u3n76uC z9nU3kshnIU=Ii9gg?|<|m2V2^U5a{O@HkL*Br{N*=}TtIogPyMU-5unhMw;#B#cFR zqulCF_tnj$3JYJQ-BVyQGxovDb*}#QlrdxQJ4>HB{_(TGq~VS<6pHn&QPC_y;|{}H z#X|;D&cqTOGsK=H<$GNbiTPAs9L#}Nhb@YX$P9i+1V@IkKCC!1bo`hM8;LVI+DGOU zvTrSUHW(!Km}aefs!&qK9;8nNm`;cat=^Hn`+4?+y>vs@^J&p*QOQfL2DfIDQm-0{ z{d;jM`G*kCO=2o1fBn->izSO=k>3&;M(Ow1?dG2>4N2434gZP*-S7Vm{dmp2SC?HO zx9;yte~o+|@Aq9~xA-p%?-sT23oX0lrA!H0N2jr(x}(OC&vl|B)^{Nb8%?KRoxf+s zhVMr_6bzpo*v+do>4#ju2Ld89)DgWcLGlbz1yheo$}Qh`Ch3=5%MPK@y|3aZ)K2>s za>V5}{#?c~R@^sM?BesrVmZC=?w`*r<pk*+wpvu(-uOCa8fPl9$(DYPT)k@up?ITv z-}tnrAKp$X{L@l;nKQRnM4R&qw~2Ruc!~d{uQqi3d+hJu!>b~!`t`*mqJi47?kO_e z2mf5qZs?X}Mf7gQ-fypif*Jq6l4f?v;>p{E{TZe#$a@_<PF{2@dO7}cxoHJ+Mwm@Y zg;DblvW|CmjS4+{`QHu!k`1@uH-3HW@<`EdCn|0Agqz+jC!7`M=Y7*C1~JKGHar5} z?720QxTpgcP-lL2VNnVevLUqY4xo!rjhTL~tW8rp_R=geRR0Y7E0;8(a{m_pbf6K7 zxUosW>rMf`^SN$q#uT+VGM8ak*xKzz@6*K7DP?M@TzLijGVoX89VVIRCBYA+H!TA- zjNP7grkFC^a=$(8a{)Yh<JT)P&vb&u`lSbCz9iG*d%p-*VOx+LViD~H^5606D;dL| zt91p<!J7)19eNpBx%n?)^mgS;ov#TiE&F%1hZ%!@Yv5vHQHT4B>~hNKEI%vWH!QIZ zWU|G{+xrpwmBKW1lG`3AshyaH<bw5(0asUv7&@+*`aR{mQ*kw|ZaD7A^_$$^=T=P~ zxRUNt7%S+-UY=j<IYaHdEAzQuug_k&lkjWt%;le_OW@ToxvCzFcU1Y0AW_!5GE7&w z!%N17w6<Y%$+AaMjL$ctzDPMcdpRnAo%i*15lk`C@4nK2=<5euZrNHvF3Hkq^Nyc- z9lKuwmi=CbT|rp}$GIBCGG-NhxUbpgd^;heSv%;lX+^n>?(=|?e?46Oixag56@?#f z#^El`S=OhA_V+K};p>NsjC*IDH6(iQPBPvw8&SC`%E>boUl)9vjV>qqU3yZY!BVv= zgWxeh-D!r0|HdN=#Y0pnNwQxlU6HlqQ4jvgchRSYQ@5(OG%za@WXgwL+GT|3e87Kn zFqw^shJWKej>=sS2A0L>$^Gx*9kZhLh68%fA4!fXMJm~NE=Hw(Lk@nHPKeAfvF1&Q zg`3^C&>?-yi{o4ETc=g-M9+-G{`hgZy5556JE%3P{N2A{0JUZ<^>Q3+*YM}<s;}g= zoXQW<tVQn+k8h8j#21#8Z$~Y*ZJk1sx<!Y5GC?bO*e9=)55GNs`CIC=h)~lDSA0V* zMQ>_1{ZwxKf_v6>FRA|N8_~JdsFo7l=l1~3Az(3H!JgvNFB+RVT<jgJ29Jj$Gt>WN zj>7^ginL^cECYYYlP2XPME^B?`FiVnSL4n4!tgf+89}Gs4zsUCQXO@BR*(k-nUSrR zpS}}^X|yLZf6xH6%g<Quv~WGi|2;JIav=MN`Pb7=$81ga*|KiJzu9x18=na1|A2_+ z^ZtKm#Q*Di(m|mA10xzagkucJ{|{e=Nbkd!N;<HqHi1_q6^e=r6aYV9{%j$YB>Z)0 zGre^jZoDmvEh$Y7HUgoTiG&U0l>Y2i42DWv;{J~=V_Q8>whfz_vNd?Sr^1)wu7V<q zb)@ON<i+t4g8lr)3w@ll#>vMjlVgQ5NHoUGFt^%oEYDfacJ(u{EinC1em0)&KIv(C zJ_K*^rqGpM1xfzxYeNx`8V5F)u%X%7z!{hLIW&R;Y@SiRe88v>O^r3=HhAyE;<OM( zZLQ-)6o#p$@x0|Rbd`(Qx!>@#Ks#>iF0bc$-sf`nZW$IB7(P~96;H?NnqbVghQeTA zX?KG^j2%v;p>%KRAa3UJs9r6VY7?6kGgccb>a<M-CXzfnWZPQumF?$P^`3MVNJo4& z79yksA67@b)G|XpUJFJzUQWWD=GN7c)>}wH6uzfD)#W?`=M-=jyb`w)B!iSNmP|0a zK~&xJgNv=U5_Z<dpS!E3w(FBtM|kmKBiyQPhHikR+uA>NUQL(jsNsBnZ}Kr}+mK#a zjhzx-G<+~}e>I{izCdmZc=KEDT>42B<X&tueYz7CISE{}R4KbWPF~$@$!#pS=mGrH zp$d)l6Qy2XqyIMwD*C1AXvxS!2wv!jMJXERAF4`+IokZJEG&_NDDemsDEJA&Yev+e zgTaC!A;F7nSsK9$V;Go!S4HsBWSmwkucr}fg^J&pA?4Z-yc5!b(IAv-^ghML1G>1x z%{z}mru2-`i~tyMo8-aKlo3CT)i9Nrwbeqhym+cc2nw$)Qc!bvNKhft7Du>U+R&AX z&mQYX%A9Ee*);QOa>{LqXSOY?<$}Rh{Oo=_BLHoG&DH`1g;qeU%+KBlizDV_ljmty z5m)XR=^B5gMc^)=@qiezw8;?2<8}q(-OqvLpfCp;%aV#+*zk8tlWDb9=~tQ}vi`Le zf5N~P1v2A;)-!Oo=~RtO`5<w#i@_fSHQ(X+pDgr0sg5=Kb9U*$A~~0yY1K2Nr3+Gh zl@0#kL-5DQ=UKKYl0mX>O26&4(LOr6$$gHCT5JvYQBr(Vu~mzM`Hgo3n5i4So*1^G zs3spZZ973_H)>QQC&mhNtR}__w0%8=Qh^F?^|sAvvQP@FT||YT6<(QLJ4?=Rhue9M z`PfhdC)5^HaWG|zP<kU;sop^+w0~&!sXv#*wq>3KeEMgFh(<6@g|enLUZ9Y6LOQ?5 z>zjNN%{bQi954up74+1g&clsSKkGoJSU(JQf4DXY>ogggJCpliBx(M~A&H^_;P1ex z;B3n$!w{YW@O`t#wE;dhtC@0bl{naW;_rHh8{OY8Y7P4knbYz&o$p3rshatEBxhkf z>&yhQT%)Y3D~`g~H4$Q8poOsXoZ0tnXc&;w9w&EwxES)_W@lS*_Z#Uqm*|b)R{m@+ z;wLH)8h{__<yYDB{a)RA$#SaL5%Q$M7|%~894He{C>mGW1#%5jF9H3=$+G2>gYN@6 zBt~416CZbcr$eZa0*o(+KJW*2G`E3}LAlkRrEMrGs#*)rw7%R3u)RMig8e7K=IiL* zGpwMXdJClC;xql7Q|gBNX$JiD$JhN0N=E5>Je|h=;FgfK+O4SxzsW<Qv`vjpV75@@ z;jgsZf6|w0-e~x_ad&}^mlvPiFpx;aX$T8pnEL!A(22m~F2!!j@1UBIGWqpu5+a;! zoi?pI0XFM3``IQOl@T%_^~u+i2NOs*mA74`t$_`y;-}MXZ5gKTH06Cqg?xOn^)!lk z+kX7XhQHqDa2ai)Rqu9j=zBa4EVs?}6aUfGDu<o=JDg>DKZOO1@K2Y@+7*y0G@*K} z!%fZJXpHjD3@2M_i1zukfIO1>vmZ|d4AYKwK4?KC295AxK@uQ`I1yeh?1*L8h~Jor z3cx8~$IUPYa;70d9C|u0HZ)<B$^)O9<mK+_6bcS-5}V5MnXSrV>+}pcx)EopWp?#Y zN`=Cj=Jt9cSC<>Z@}xudfJfmLn+PB<7l7H0lVwY&>Mp6krfOvIbOanOLGd0~ns^Is zd;fMnZMK-({(8W4hd_dw%W&4<9EVCvVlr>eLfpE>yHmS9j6*-S3OP$iAYPfxnw8tE z$)<i=+*mJHcUw@b8DEsNY}8M9kj7kWreWItDhisWf!@NYb_qvVDY%~?{MP$0JdDQe ziewCLsY7tkEs)Qlnxp;bYn$pulHk)yQ+g4Hr{c1j&s76y_|V1L*EbZd%O?8vXd5QC zr2Kv7DXZCq*@kpxT#{<pNXuo6+eX+a;gv?I7$=3`$*xA-3XOc^N84|)!3dpC_Or69 zzz}vmgTPbyv=Fo4z@xOb>R)p~+1x_~uibw+&2i2ss(G)TFG?}!|JK<5PY=)kZ&9L< zM(4!-|J{@SgX}{n7}DO?%^s9$D|L6p)_G=#gR+!poq)D^irl2=o#hd+F}!<#K<%-q zo(2h>q?)bMKH6#meMw^IDo1I!UF0U)24yjUR9awpl_QJS^C^~Jq1SBhL<&~=kKe%e z-a=mthiA8zjDPNGdCA^fa(MZ~=bzRC6@H`sV?#<ELk3VuuR;UZO8OYT6~>@$biV$c zH!-2|cN5bp2()!<oqoJ^q}N?iP|=?~HYCKZ>0c6~TkT(=^}V!m23$5b<Ml>2#(0%2 zxE~jNYCa_=me-?m)p!%8sa63F{l20Aevv=>Y+oob*Zg*{-3Y`S!9g<<?AhtnIxC`f zKNk|~iGWs!-P6l)y)>9HE+I%MtVjsd8nR>CSP8?#Z0?|@q@%|5*=^^E_sn#2KtrQ~ zrMrl4I%7#2vCISRgj3%wR4NOe&%jk_6&T@1n*PMdb-PlRcD15HT6&;3Q7n>tKnNSy z$8lyoB+GpLcb+S@c@7WV3eUf0nOoRX2RRR_M`}l${4+0!q5kYkck-oLYJL=g**z=P z`2NT)3Am?AGuFQ(&tWSyh8m-;eY($=znm|a{&f$vNlURNE2yIWUX8LFUU8iL+%5Qm zOR|R)i)C*eMa5J~{16(d*tb;rkM2gv{MXv_*OrneqdAeAx0`fzS7P=JZ(v4m;>#m8 z+o?ffg9*TQ5B{F?^^jIdO{)K+Lr!c>A01>|$`}m@#g!ocAUPSq`Y`JfCCi4bq9JX` z_c&Ky<mc`K&R@o{qV6Vrk-S^2VkwODPG^In2%^?_#CpEv`q7?bLEJ-qxjiA>ssq7v zpz^26t4dxy5yE>W7ViP}-<2$BGU?CyQuun;DV{wF?lEK=u((%o0Wntp#dniR7`$cK zaZ@17pD#gL>k`1@X;gSE{~YNmz2MYV-aZ$f&cB8>;m}xcRC46(zyi**1R<%X+il4| zSrXMY_`2d`aEDJ1J~aG>63RDT@bbs|Fsx?id!-}*3VcJ!I8l@Q?C_tk8FpjJ;!N(W zG+HN)F;Vr*b0hKd%kvZFe{<poz$%3Ag!TMbn=Qg##Yzu3SwTQ*Z1$NG*uD>N_3C#U zZQS#UJ<ZVZ)ZA3*Xfdkb3wL$s-NUVj+BmknHD6!VzmvzIoVk?Sqa=776g7Afu^Fi| zVs^74Kut^U&<5ajuo${RolQX<-A%Vat+0y#ZiEY2W`y-r^rX`d;>w}Pg_ut)5f*)) zKUt=5J-w==iQ_n7eos8s6V8qNH#PokOV__C^jiZwbO;=~UcQ(RGroue?G!MG;r<y# z?=H@zx~_Zwybt!;L$wh+kRwl3`&M+@9#-uGkpIzzhyE_XWb7uT=Uk1T*9<)c=U|Gl z*?R<d81a4Fx8A^1<^-MIq7P3opT6Y%p1!gq%s#wTprjo>s)Va#yj@5ROJFO2V~Ev% zlzvAt4*<M#Am6$}y?!A7WSw;PtVi$kYHKsC2+it=xp<bSQN1Wr(N_o?uY~)e#j*+j zS0F=>m4!i^QElFt-b(^w^jY_)`Xo8s73OswD2XifOVG`V-m$J_%gg8if<vz=6K^qB z;>u3rRk^@+e3CO>qw2new_ObyT$m4a!3Jq#s(F}^bqG#!vJaY~r%)?-z`^%<t3R@m zt=zZhAhY)hd@ElKIXSdGsJ5LW8go+l%pm>k<lk%9m3^w7p=`pC<ZTD-yB}{YHtFEH z@7)1whWC7KBk*qwem~R$v;BPYZB6Tna9N4(+hWkAUyL~b-@5}Jo+i*suc2>*z3Ag= zo%sF;1EGa!{`LOnHL9D4?H~C0A6?Ia|3S21_syLv%`>;V37?s@EBY63LI$$t1r=|Y zk9`0eWBu020LlO8qyu)E=H^X=dXk7I5w|Z|f61S@Pucxturo6xLC^<T%A_FsP8dJ` zqit)`2L6`x!`5vNNz2QBWR#2kqazp%96o#D$oX3j-q0q}y!}Te<~I6|QGpHi8~ARF zmgNCI?v)ZQlI`nvCB9F8%AmRl&(H}cf6aHi3PO~;@&((T9wbNd?4^iyCY;0=Wsmn4 ztldZj?})%>&;{C%6JP66;LeGRu1xB0z`7EyeRT-<!_RA7?8m>6j8yHcirF6RO=LVW z<1C}j@)PANrbO!fa(NKk_fS{A2M(JA!2TJ*!JM*5#K9|FkFpYt0KX%UqvElJR;T!t zjP_A{j#q{R;7_Pm@n+FKqm!z9TJh$;nso_=b-^i^?@&J$`kNG47Jm{D7i~krqJJNM z&$qwsiX=sUmloamSboUA!hh7mXy=`6)+V*kgNN^YrmuXtgZvi#{V26P!Ap<p>pGO8 zSu%KauitxjX*J^NrVQ10AE?&{Umi;^Pp6)|>aHI7l6s!hX&t&BfSjH-Nbfd+7K4<c zzt6x0D&kr7jKj~ee++=$7poP(g#QjbwUPSu<L*IU%$W>o#5Un@9TF&G{0|YyY=<jg zPNpDCei0(||D(%E^4&tx%;jNWs41-1z}=%Uy%cH8qfyQh<aLrI4Q45+{mMkzKsLd% ze7R*sg?i#Q8+FJsJHnC@YRxwz3`|xl&FROQNJ~qi?;e(gQT!;`JO9cJR4sbyO5<2Y zH<+PWj|8{$lq_?!wY&!oB(*-LNXiV2R}&H?Ay?Y1yIZkxd1K3mu;mgUScX3XJ+wOL zl)zsAgX1rjw=U;Pd*k3kG5*A(nKNtUJI^XC{7&IWyTJWVH=qQ?Pj>?(^BukJeck%O zl9rLUW^&JmYd`_J|F~p$CGNbJUv2YTp&rrVq9N~+_OyJlHd+<w#(ToQM)kDx)4Ly! z+*?`~-#fJJjx^J<>-`PZ7v7!HV-by;%x`wQ5&nu=KvSTR<ZeUFbG{6fCOGMc#{Pr6 z`8q<}mmE#!Ot}rN%scyuI=E`^zl`&Fi{LroeE!(~pG(a7W1pT5ia3AgL;gR+S!`}~ z|KR^I&JclCe>;8t>kewk*Qg<tbR%DJz3DkTNRpH?ta#&(#FmSIhB1h>unj%cs;a^T z1?vq@(@Zm*E?`x)oWC#)g;aSp!j4#SrjJnh+yry3S<tiid1fvue4~5Hflqk2eZj8u z@JCo_WHL&kLC^H0v<$y=rI;Qi-0vc#jsL1m?CWvRTA^xmcP$SSSd}@$=;BKFiyvhE z;BVvs{>GR7q1vTlDB+0%VgY)CpG(8qnulynY^~to7$tEbD@`zJy5ZTB-=L<FUYMzB z5kvDQmfD_DE=VYdC?<vd%1d`VbXm0wZ6(*|{|&s~lW}E^p7dd7dffY$3YYHQ6(=o- zkl8uvR5AJjfdh{aw%Qpc-kubNmQL5&zAX*uq43{<DEeOR=1-R2l``)Rp8V`K@C&xn z@&yZlv4X6_qp1fAby1@+?%;=Nj?Q`7o_%<wZ|zR}TxbDZ%1?A{X`c(Or4f;t-|eU^ zPn6;VQi@CcN0X=OEg^w{In!Bp7;Oiai=wIXydBIEJ~fP&1~nJ?#lxS^bwdVeGsHCZ zIRR(Xa*R)@w(*F#w+z1;bCz3AC|r||zhuHHqL_k{OtOF0or!!qu*Yhge4~LYM?7ZA z!#rO%0l;ko7i%uvmAiB-F4vdeBkpYWxouooJf*bg=`DQVi+uLj@G#XZZdKU&r|kS0 zg7O2M{2E=u*O*LFkFxl3Lamvvxe1bFoP6~rJ!2@ah;OQ&g>|BhIb!g|#{QZV`_p45 zlwgmA&!&Ozmkf^;{)dekRO3q7l&YbWxei0<Q~t|hZ-9DUlJ_NbCLO99Q*)_qd!Raw zh}~uHf$sU{Vj;6k(&W55HP))m*qy-{OKu9g7uXG*%G<~v(8;XXvM_w#ji&_VEA%N^ z-8u}_Su8ENQxF!>f)vY)qPhEM=wN`pM6mRn6PH6VYuIE@_J4GgiE4JzLwbwH(w~1s z|FuH3W<GaV?y;CY`hm0Yv+8@vz@t=NRB;~->&l}U-(iVu+{w~t?WjDtGq5qjlHfe+ zOW=9GV|8C}YIy?w;2BzjAdqtS(D6f!*!-;~5)rzZ_CssWAKcgm#rH~A`bU$xi~ZG7 zHcrkfGMobkOR!u#0_JIVzmS=mJp3bqa_!!YmE4w~++<t=+)IXQ_ax5-=HofU3*R?I zJh&;#peg9~(}wL;vk@-`aZ)utg}3-f?!v{q;yL{dQQnY}iZnOV3#9z}GL5?*E;;s5 z$k}{txC?{{kqxAa9}i3L$Dvm$o4#sNf}xCP2`=NqQQHu~q<$VYcDmxC#EliYwW`kY zBUK!jDTlvYd5w?bnUL|UwYOn4{j2QRG*Uw;k6`$kFR2CHDv+xG$E4>2C4jl96<?^y zo35f%+FF&>noNo8=Jv>QaY>h~`PNEO6}#P^@<31t+o!Sm5M13Y_lq3>ZBwB7PH0Q6 z$VSoufNg9J%#FRLEoQZh^K~$ehVVv}$p$~o#`zc{rXhl~O@mZ2mAC!LS9>`l)^>)X z-9oZ$>OBWoMlPC%SN<*WKRW(Ucy&m)M*DwsziYz<K3+TjpQ|SS?bwvT-Wh2ch&|Wl zLfRkc6rKxO>w{jgnLuB;4{VQEFQQva_m`Gg&6k+OJak4H%bPrwy(M;&SxeQ!J^W`B ziIURN^x!?r!*l;^5l6b|0GER6rY!1h|GmT0|JC=;qqVX`1@=^)bt&!1MvkBkwF#qB z-zOKruNa@K1uQQ70<5R$*AgD@(Y62Wu^-dACbqbx9jeTzn)$ll$wMsNVaj3Aj|f;Y z*YY-L><{60D&4@p8IKgK_nv2H{A%S~e9&`{!ut|+*`#YuD^G)LFmG7bMf2yn6R@_l zFU7#4#{iysV_}^o&R-ICT*B$(;ZbN4o1q0w@dP;@V~6#v9ra*Oh^h`v0uw%d_$RU? zf09?fXw;(7L`Kd)Lx%m>^&^JMh^b+Y0GFD-A!ZJZ=L1i6BGIs-s4?YIU7(k&!&g<f zM<_2N<tx-`|FrODs5kFy39yigO55mW6~g39MoGBKM#_15{)V!L4vHv{LwL~=Y3sMq zH5{fQA2(G0Wa-*p8B-e4O>V_?#tbPcxF+;BzCNpA2YUVBV0MqH{2c{YDJ|;uM}Z9J zJ85?scSm748?4VqDkkqk(0%&jDT-Ld)8t?VE-F8@#{{makfkz_0{5GeatOAxn@rVs zQ7e_?($DnIvgZotWgdTrk`xEF&{drI@)_Ths>w@@EBsMgoSd61y^pC(CZVK)1#)&` zW&n7uLFpm0HT(DK40gmrCfgBKL$-D;?7G6b<JXY<fW*nK{dIo~r36$A+sdANWp+p~ zzD%I`zVGG0fEk6EBl3o6!`#6addsh*Ds6Gt)c~VuR=vD?YHof0+Y)!?F9?PPVyzqA zM{G)oOCr-6K<%TcvM*6!GoiKc8sCcfN3dT!W;en`<M-LH3~Bfb$F_=oSi6%osRlJu zqn2`wJD`{ICWHIdZ(y_g<tz#O85G5VhQkd&aSQRJej7fHI?ZdF{w@1|vRB9cqch>F z5h_G^>1t&!eW-O}d1zzvj;WZXw66s8ou0n)6TI0!i%*|MZ!foao_D|K934fHTpfFY z^9*<WH(b>g{9B9bUp?IQ+;gouh1y1$+E!wkY`Uh}x)vk4Zzh;EuKXeSzS@MEE))of z3KYtSG<Z`AohT%IL=wjzGj8V?rWjOzk4ufK6MKJeDd_11@lesefgxaIsT^r=G)d(^ zM6_FD(g<KyWT-|eg-)G|@?y&m0kF9i<e1>YJ<;nJkoa{^b9FkV!voICIV!eep<}HN zJ=b#|0C(B$G;~BfjK?yqVDnZ0?p{+5c+Mu04L#mKki2ViH7~oFDf0F`$C;u^Sr>-@ z_MNBVS=WX88>Zht2{&r&b%OPtk2>YnAm~!RhfS&~(F~uEI#}6;m-P_KhE*>&T?8VY z8Q!b3vI6gxWgBxV?AsU%$sL4ZC7muvAIQngx4mTPf0#Ps4yw<417IoF-e|bWga%XH zUlL;(NQUOp^<$(}Wvd)tO=h*P!d1R-rK_M9ePy<i#v{NLG$%P6_IBD)5PJ};N{Hd9 z|Buez2lN3^$nV;EUg*~o+`KSljdObny;L1rbW=&JYT){u07N5(ZgTy|A!xfjHKX_o z_dmo$O3Ov0_C;}*LUtn?%$*H9=h)9|L+;ed-PHLEkFq=QS}B?(ji{_IIp=WY)NSrz z=#o?ayw@2zXVUq3O96xIof)wy_kEagx0lQVM^!m3{G?JY9oTjqNK|LCuE?*8H!`_! zq$?KAfh#mDRLxXVqF)XXHZ0r@GnB(nuXQ5a>ZRmrT&I2iNFC9qd|Y(pQG*i&MptXk zgfU0JP_Oyg^SX5dEH;E<0G(y{)X08Uv`w~4k0m?$q8Ccq5SJ;n$gPvTTNH1qD4-lb zW8*d5<5&&JyWSQC)hkx|zDlS5gqh+a8wTAH7<__iUM#xCuo)ia?kx<7c;%U%hOckq zJocRKedqtg+qaRzttA~y#1O{H%2V>`?4m$U!1{IUtkj-VYE$An2}z6E3y%FZreX2} zt&LOl4GKn_qK&D-rrH^CzS65opZ(Oz(gq>S;n%u1o$7(a$CtW$FGK@=4mVbih2Hln zsEgoa-O_DLM?r-(eGhXCg)8zjYjomsXi9O#lco;xU<9+hNzEhn%b`F>ow+Xd&M+zx zQS~Jo{I?q7JbA&Y+`0P6Y_hqWiGpL@{ksF-j8;p^bRb4?(@5p$tBK}Jm(UmW9|a8k z`wUi8*uKS248=!R6)l4xk*kao?t&=Q>m$|_GwqzJY;z^&P>Bq?`ZFB2nc=6b_~O!* z`rkOrsWXn1k=i<dmLeD5R4rugt_tEYU4th0Ie*ml&-wm=|A9}T7pKKCl+gJ!Tx#@C zucePLccuw(cl9%6f{u+u^K(Ufd^U?F2CnqnVRzIYPc98vgBy#v!WP8(V(iDBlsO9W z5;xVWW<1lcKfz<(8lO6=nL0MqGGE(#!p$pVujnqa6$s{asIg;^(D1ooZ}mjYtExXS zTv=S`tmsFgY3i+15tgu<%9+9@VMH8zHv#A?0a(HcSP3l>9QJ&(2@O_m)XW;wZqI*8 z@Z7Jtfq%`IY7aymQ|BGikV*mK17Sr@@N^d!-*4fJbR9;Fpv?-Cw--t7#u;~R%eu+k zF@RC&Kc*<((X&3_w8Pv8s>&Gi9YrE|ANa7vUDC#1gcv}^d2b_vFt#Jc_49*(;Nmii zFWg`D1iky$bUXXGo#_w7<~3z^N!Dz3L_0$HR|EeuNH%V=+dPJUQ+x9pGM3Jl@RrUq zVz>5<e0CnvhO3-<nS&L>YohQzrvc~<U@bP4erp$aZ}~~TF|w_*Je2=3!VmF9l_w7) z=Z+SgcdS1l*uEcQ5`f|HrsAnh32<NEPAVq)S=$BF8o)j0D@1|$caHKyaXO{XjfLR( zPQZ4@g$K$K7mCpvB&Wl{S*}1D&j!G>^OR6^l%mXXH7l)70M%H60Bgjch6FnD4g7wo zTz;xG#KG0nawU)JSoqOvP@oN6_9w$$guwXC>1k^oR|d5w-y8-PqkjRPyvT65_X@l* zYb|bS3CY4kNm~1s>J_!%&UPOA5pQ#<*@mH{cCiUqR6FSx|2`5yjMUADVwUX9qPX}m zb=RAmW*PrSM+Cm9tXejduxNF@k5T5p)&8_8o~Z{nJb?@3go0?`W~S)6DSpqIp%G?S z{zNLi#y{Ov+0>==7BSBJ;)EY#D#f{mO;`lV8^f-Xt0(r|-tXGW30TeCBGTtx<He-l zCO#Hh>uN{r4~LXT)?sMpW^Yhzl9aD3T|33FQ0I;=`I*wGZ`|pn1xvi>1+9;;)JWO) z)VSz^SpH(jQ)qW-2}q%wDk~9N0h^!))v}-?LDd=9?_A8;VPoDW8-_wsU$eJwFE<50 z%?RZDj0D_DjwQgCrj;QJ95Fo>tdHQP8S#y17#!5CD&9l4{Pv)OpIDd~w<d4JZqCGb z&#|$yCb0lEuV7BWsmee`fEhP|&k+w=zU`=YC=GAzByn}880y?t+1qMUP+WNdI(?s~ zRd|HRnp6J3KI2x>7}mCd_fL=Ec_I^5vD@8bVcxtam+!DIG*<e2sFasfY))jcrUYP% zIUR-?-)4U%`+ZZ8Wib6|$4f80{}5#uOB!*<ba&g@1S}<sM%pKuKMqXw<#bYTu$Oh_ z@AV7~GHUvd&XC3HFi0Gg%e#2!wd}F~zA-+fuHAGcHqe?b>=(B++|{vym=Eo_er-ma z{hD_mrEbmHV^h_ByCCW=t@)R1%uaBQl6*4KPET{_ckwczs?mX(I%PE!UgS=jSDNkz zsa}o(SOturO{{7umb<W4(;n(pj0!zh$S8Qz%ZN#4*a=DXl5w(NUKji-Lwt`k;g93K z2{nhfWr6M6Re0d<iQ7a$;v01Il*RI}w7Ypw#D|cK%Uu|U%R{`|N$o>0*{Sc1dsnQd z;M#YGVRy8&NlRsq#OJ^IVeQ4WG<lAmt8B+>VedsytVCJR92<wr5{=(vnJxq=K<VGO z(zRDpxuGZ4bx%g_`)qrhpwB;AKq?+fGGdn<)>s~G;GY0_UB;;&yoUlvylTI-?OWG$ z7zEXo4gkHGrIDYjeNzy;Qb)1{%&C6kz)iKLVgci8YG)!@C4352ub`t=9{#uPXs1cC zRS2fNDVJ~t3AHioqFybHn1Ve*a}dQZo6z}F89<^YvDQK;5~S*0q-^{;RD*80AGR@h z{<HD+y;!|!9<a^T%ff?e0ys_-Pk?*e4cNCwB@oXb6iZJmd9YUH;Zc~1|1WBYYZwEg z_=~~msvaI~+80W>s9z_e-Gl1uWG+VGH9CbXRbWpV_QSOCYg*MN8Q1?pJ;yWoj#y95 zmLAMy!ZpiBCmPDun05f@38;yIY>hr9J|ZAC;Zw@p5>l-o7?t5V<%qS#q=vq#8=LAy zroCdIzud0=^>3a6$lXWkM=(o111#EAeM(-kk&d1%c3icHN2!tDS2?&=KD|3B9aW8c zu@SmLW>o+~l`fjpn|@bi?mpu|O6A{F;MT$Ro*oFRna4osSh!~sm%$&p`0rnl<_2C3 zipW8K)+$|FW8)r+VOk56!NVuSBrJ#b-><rIyNgXPN1#}n3Nk7mLaUZ}m;xHybHfyR zuQ3uE;WFJ1xF8PGJ;v789Pvg;g!;~)9Gq(m?*ivM4%^+y%9~x}@XdzpQXnR#Co_^V zG+*`BO2eyu|NdWV|Jr=*f=&Fyb0MQm_GXjPAB!ZWl}YYr&YLJ;rdL22?0q{AL-uBy zu<5ZXa<ow$zsJGrrRDic<U#cCXxip8v$VUlRB8>ls?<d{i@)%`$}`kZxRL^@acT4q zl0Szhj6*7`Vgss8LCj_g^*^=OYaipGLP}G4T<HV=D_y5Wx*Tp|%GF$`-LSA3W=axk znJ2-3ePMv^K@`YU_l(06c=2+8M0@>ye~WdPTofjY{=Pd!vRzFW?JRoiCX3lyoz%5` z-yLgADY_wJ4_n4AJm5GUQG0Ni*{9V1`o5H{ugF7rHP?qmQAMwfLvG`n!S}+I>6x>o z?47*&L7^W7#4qsdNXX|xZQcsCX8WcP{Xu(}QnD;{RaV$$a~yklxk?}HJ+Lo0Rm;}6 zO?6g6O~?<rz(p8F3hh24(|n6sI(w9aE<86hG<mm?m3LCOrnu2Pq4c{1Aa8{FqVFXY z`o|7mbw3;wjEN;#t=&&?Rp(%9yrgWDc?2<nWlz=J*&@oU5`fvQtaDSrYU}51at=!d z4p{qRbYspn+6U<LTuRvA0hN1o0+hWD@Wv6a?S9WCY{X?`fQ6Ltu*wmO(Vb-^W%il8 z7}eQ4IAk<ZT)cjn%kpNueWCbGp;g82{qQNHkU}-15Cv8GSi&7HMU&!sLv)3W(I29x zyCsq=6XiHi`FXp0TZ~7FmNJ-HmR-diHTV`G=ze*RmK^Gq^1izjdF-9~GVFo`a+<wb zz|b|{S3$fr)IMAT`8Oq!L(I1RiM@S_AcY=yRn!<g`)^t3R;Ab-6~EsXXg!0|Y~7Q$ zEaLFQ!vE+36#kL#CiSa5CdvfgK{d`#x)qgS(kt3;JG?6RsxU>&e2_+76NI;I%2TEk z22IxFu}KT#5CRkzc}<n~h?NAA&7B947rWnWo39!;q?jBkW6rqfPN9QYdkY=9R{^c% z(~!ztuV#jKEY~A>Tw|8En5=<=)hk99gdANk**hHm4;5c)`CD6QrQd`+kq?}h(51e} zMxCXYK5zSw0Hnz_{aL?PjUJa@l+5oJE>L8~I@GKwP;y1!TRpCj$7#d!hJVc;Z>VbK zA7|Z&TI1c#nVRHhVR5VGMg-LFsBq|^t}%7gWq}Wfq$}Z?0tJOJaPekCn|=G&0k!;t z_BAYgbW$B%P9id9Ywg0(d3xeuACOP?{dar8kkTMQ)3e+)9D`s%U$ovdys;@&>KS@| zoGQrU;^;rpLj<~~=X(cRzX2OJFGI`PVpNn#RPVVZYux28nY$IQ^^C9SipuygJk*N+ z+5dha4_QyQIDhf_uhI^-TbdeT7mWnEB{KOh3EZ(xe*_WczNy6WOGqP$+R69=vtas* z3jwR)^y~E2w`0<$CQcnWENc;v1EO3(1+=#eH8l)-Z2n++rgCdlJ?QICLiZxA0yMDT zczcI3Td@xOsbEIym9WaoH<iwyRzD3h8EfTv-pBV`1HAqzc>CPTJD!>X(3|XA&3@=z zWAJ_c{v43I>>AGWh+nBbfSq(Spt4~Fx7&O)Mk{~f|NBuqVS4GJHTW$&FoGd$K;}x$ z&jB0S?fL0>`oj9>L*rj^q))f#&8{1VmS*5gmP2o3T&vwFTBu&6A41{6rRw-~9l!H$ zRza@S&xpMimO@gU9j-f$qBcPu3EVRRk@Sx3v@GrtiKo2%X>I1f`;xCm60MmXhm&4^ z&HoHNFK$>T#V7~A%nQWK(HC7BR<tjf?@F*8ReP-DqIB_jq@qFI2iTzWyKC${e2J5Y z>vw<5$x~K-&DSX-{-bmJ)3Se4fbTNw&v`=GzA<>><(e+Enj#<iZdDd3k+e->A0?JJ z$BFoox}FLor+M=&KjK+772>%6JC)yqqjEL<dg?f<y}aYy&)01(Yec`$H<i)pGW2-d zo{U?ZYKhuWN4`w&iM0D&oJDM9V6jyB#mq>Y=2N#-DQf%}c|mCXE-m$a&H{@wXvS@^ z)c#0bZDg_a7eC1V&VZK6N&tOP@w@9(3&#oF_!BW^ZzGT*s4@CVYDDsXbQj7}n#UO* zrtly4YGoF}C;3PzCYi-bwat3BQWi0(0Lr~#=sVrf#?=r7RJR19n?T~k^Q*N&hfj}C zp0Q_V6>VMF0}AxyZaPWrvhhGb^LnbQDNCN{eBS2~(t@C~Li6+p;-y3Uk-@Hl{R@_< z?^K4;`Y0Re|LDN+4zI+4U2#xo!w|dQW>v2lhUfnT*bFE0G7vyvfthAGhTCOB;tGdQ z)9=PIm|4sf#H74Mii+#G%)^)i+*ry~fI=3ThJef=i0hLJ1RX!zHV=y-FpC7JQK$<u zs{zac4IT2sU0%>!AMA~Nj#zs0F#+s`I1d2mhrhXY^30wAgXB@*H7x<FU_~gL(_N=* z&*o&J-eUtP#T%KzE18j%$^!vkAo@rp<6#BY)H4O{@fyam--cA#6kL0%EUu#D8U=}W z)DDOGpCI^CLyxe=OBz&u43NIaM{D$5Lg`JPGlh~GYnB!iBmpxotinXB9wl|)p~Rs| zC5#M1EeyRx@XW(zcQR1`q9n$p4`{b|>m?*B46pK2eJ=#Awnr~e+If_l04GEI2&<NH zYzEy={{Sc#qk>r9=q7D~Sf``?!nV0!zp?(IJ+=vJTVMMpsbM9enE}K^kzmGu0zO3; zR60FG)F;AlI)y?LEi}QoHwBD?{De3Af({G7_bQW!4Z%;jN0#7i_boxl_CWES7+a#9 zoG^va`APW^B}SZ)ltVLBpy9ol8;CH1cUg$oaH5C6!$UH-*D$Yhp5y-b4aP)O8IUrg zFEsJVERe0|r@{~wE|h9?7iu0lIeB9(jLq$1K!fUbz(_0lWknm9t(}_Sg__$ly&N6G zMFSkAJNytTyFj^bP?{Rm%x_M;#2%0Gmwl4i<`_5Dqqez)fQbN@Lx@sxp%V@2Xq3AM zH|k$6#BYt7jqE|svNZZkRA9P+QFd)XwxZe01)HK4OnZQ+a(4MBQmz2W8wLn~S%IIn zf0L#evT6JhI|yc^6gB?<gf!+J%*8g!d6xlUx@Ke~W%(tp4Mrq!f}>SEWm)cbK|9nz z#4p5qqEga!%`hDhtu~D*Y%o=*%ICxW@M3&8CME^6x|eZt+bnjR9m|9Ibv3z4wvX(w zR8<-|nK&qFQ_NKms#ms93bkc*=AZ+Wjj!>LhZI0&T;f;AU;^C`G50yWL;&szD{w9h zGKRQy8l)!X9d6bbGgUfzWhAZHEDd%<v7+$~6>W}XK8c(LaV%{*V7i4PsAz637OxR* zvSpBPx*a5T0G7_Z`bNMaG>p72uxU+812Z*orOl<m3?q1MZQyd1F_`7yZwJ)&jk4gJ zCL<^R09?hAhKSM`-X&nMOBgvgd`!05=Ga!CDF6y(;uVd$5A3$X;S9=L(9z5_w_1#i zo?>>+;CC%RFiQtw8|p=sXou->EY3cl+eRnmHz`!as+<s=wE_4eu8l(}R&#(Z1+}wM zucTkH2J?{?av~S*_D2NgB;mtJS~>p!QI!gf>v53~!9mw=Os6&`bjUCP%u~W-h{7?g zr!lA3raMOP#tE-J0NWFHxuZTZ$!23oq*craR{;x4O&G>lUr`w90S$~$XpEH(-z2m8 zAinqVe4NP6QlJO`egbEgaF3!JLqu7NOh~BnC<3`fRcPhr2wq+Zk-*4KM>;0Q0u(bp zuvO!M!fhSf1k`o?BCOFi%j^4t=$M1D4c=AAK(`pNiuS;6Ngk@3#5SzC^(iXBl3iZx zMpetx)IvscaT)}y0Q!23ZiW_B7v?z;8cB(i!G4Fb84a1#Jw*h*vnt5iT$l{YDhSK7 zD-l#y!+MYHFk-|MC2F8waGdG|QAFPAAc~BC<Z8rn_bzFPjw9`rWzo2dSU8H>BgG8{ z<9Bw;MZqj>*1fW^RkI3}aRq(@nVbO83N%+iG6oFSh&BgoOODu=dnWW1qTqta!PF1s zDTBG%oz7la`H5t<Oe|R_n|PTeOxsYKHyCRih?|Bow~4rIP8T5>wfv32m&~IY(HH@Q z{vyW($x+{4B2<3xw|fvzzYY4bs?0D;8jX$#h|IJg#2JYZs56<hCPr~hE@z@Bdx85X znX<eRvsj!@<?bX%IXE;~W+Bsl*bES9cKG75+`v<sZ%|?#%Nm{x6Cun+zV!~?2t>}6 z9qThSrW5HId4-rk0gz^A^(Sybt;z-=TTKMY8s<1PJBI%NXgB!4tH&4s5yQkq+)t@Q z0c%fEkE-z!W(<bLWT9tJ3tgRc6+U3#J0pt1_<H*j@Gy^z(y9`!m4(PX$}vt?XR;wk zmBhfEr4p*lrlsBs5}4?Y6DOQH+o%c~nO&9<LlgTW2~5dx-4Je{pdN@<7y`|$CPh~F z2)<%_qBsrUgwvSf5#F>xM*>mPf?utmHuAU+W4S=6kZ?*bqyjWx)+1ruRK6v`WnfU- zxlnRq6-w3`5d!B2a~@+7HIX?N0grPx@+90Vwp1r@g`Yw)R+!yO<)S8Nb32I&A(qW) zfj|yUpZ5(o$++het>P@IgA#cWl@DXD{UwtNV=T^9<EZhaB95Shx$UXV;VH&vcf=43 zLiWO#1hi2tht7s!Zt2IU>Dqyqe?0(*<}n7L;BgE~QC#X#3F{k&PA+S;3kx+Iz0Ao( zHh#daq>e`nBX|=EtR%`#VhQFYJ<C1u1~VF&>KbeiwwafDVj6Nw6>}EkM_Gr>%qP(d z*2Ddl1DLCxe1CT8Qpbn4*lH2~05BbuVnawZAK?pgI1u`WL=mVPL7aH!`ioK{qfmru znD++Z!SgP&J}cnX70V6+5tN5#Fv6e>jby+HlwtSWv7H%ZR<X~xGQgr$Q3BqgNU-$) z`QxC%%ejL3pS^=af>cKhd4|g{1hK8v#I$#@4N0Yv#X4nW@W5lZw8VuSTbV*Y#Tbql z+_iyBI+jD!qg+NZY6b=+(rCDrdLZS@L9$+`O(XP05UwAV6fKTJNfs-uj)zf{waNUZ zi9tr=ApJ|&P*pGEljNbC=yCR1Gf>`qIHd^qaWgZ(1T%ISl%&j6xoVRuiFBxEh*yP< zPNTwxE$moOAT0qB>IXj9^qj_pKm_3EnN&krj$*1yCZ_cX-{LAwoWVDP#CC<!&&0^W znu=AI)k`}Gi<s!)WY)st9}{F(@iAV+bDk~6NsV}6TcXZpF}!=JS5X^RQNuT*&CFfd zID3_EOm*yu6J~!=G*o#xcvQRv*CmB%gO{V}30bEw+RP>qcTvBX22_E5qZYb=qltDK z_be?+36xnXQ<i3##1#uPXBgPoF*p(B!xqr|%F6x;Z(;i<E6linB+?ArObd#vK?VjI z5qfrp5h7#SIf`UPj}f`<Q(`oMU6BK{D?E4Ob{FCv95XfPCt#CW{X`UCc9mrsJWVDb zwpYwRav<`i&l7ElVa@Fr)`LkEhU2q1S#J@@I?M%)C-xFd{{Y~rj+fJUgw!Wcs))jm z*=dxyhh$fYL}4SYU|7K4Fv)w=r5v*6=M+O12UGVMpg=9zma*3mF6JKK(NV=LCMq_- z1<a?m6^VQY4&$cc0?TsEp=VYUyHv_H0$mO#>yHM5sF~>TI^=%BATY@jXK}>byO}f0 zB)afa49^&eRL3b&RFIV(Dc8L+hN4)UO(HlQ_uv<$j;9F+gz=UtW9b~mre*b+baw{4 z4IzZ&hGHyStp?_AFjiJtTt-`XjxRF4HsBC2afwfaZ(JiR9()CVP)xdCjG8BM!zEw8 z5AdO7!crs+KbR?o&ZBB2I&dMSn<d8JFb-ObsIq8WZb+;aK@7hT(&d%F`$~hRSO~U! zC`f`O0x_dS%WO*4j~WnMlUS!usfRXJ`ysGM5}`s7+`MeXTuP?6Se6oz1f;=mQHysT z5lh+?-k|cpR!4L~fVj}{fJZH0Oq|R$l@jU+(i~i%en(uzKufBLXWXlTg*cYgg63T6 z1K2@_D>FQK?oh%ScPw3EHvS<VCUk7UFj@;EnZFZZxtA4q`VnsR4T^EbElh~5nT4I) zBx4g979i&o#8@^9$h$h6tS|_y<~nD~j%0@<0%FuwAn?cfgo+8NmS$wgJB|QK8+;zp z<Zm6~Bvlqs%PV`nCo3&;E6jJ6P*EsLF6C{-B*qC_E@25qD19*m{o;kIfswK`R+(0G z#ChCRVTeAIYYam@hID{#V;Le8!xt&OWmrVgFTF%+O)AGM!a`*Y#Id*yVP;V^0tJXA z%mO)shA1O8K-vl?f}S%5U{pxdtO>@B<{>%b;7h6EV$2;#5mW`d!I?u$>WbXxL0~m5 zbKqf!EWrziWdIW$%1CKqvRf?b8xFQspW<$+<>yQXCgvDtVlJvPhT{oJbp%;2(U+-% z1zw?HmMMUP1Sz?3#AM@1Q%7><NQs$1%+8s@XT;ngq7DV&jLs3J5@12$mntxo;daGQ zb2s>oK_4pt8HH#35!e3!CJpAkAJsR_=O6I4$+N?$qHE#T9|M0hP7yu-0Ki^jxwFNl z98DRwgJ^R%O<xm#*woD5#mZ|NOm{XWu_n8Z^&)M|-@~{5B|Z2wn|@=|)j$8)u@bIQ literal 0 HcmV?d00001 diff --git a/examples/esphttpd/html/cats/junge-katze-iv.jpg b/examples/esphttpd/html/cats/junge-katze-iv.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c3cf70b9cc8c789b343dad6f310d63208a31830b GIT binary patch literal 34289 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 Q12^^(h)OaO{644u*;aWSN&o-= literal 0 HcmV?d00001 diff --git a/examples/esphttpd/html/cats/kitten-loves-toy.jpg b/examples/esphttpd/html/cats/kitten-loves-toy.jpg new file mode 100644 index 0000000000000000000000000000000000000000..569ff561340cd46506829efb51d8ed0d7cc88616 GIT binary patch literal 49447 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 literal 0 HcmV?d00001 diff --git a/examples/esphttpd/html/flash/140medley.min.js b/examples/esphttpd/html/flash/140medley.min.js new file mode 100644 index 0000000..d1495d1 --- /dev/null +++ b/examples/esphttpd/html/flash/140medley.min.js @@ -0,0 +1,2 @@ +var t=function(a,b){return function(c,d){return a.replace(/#{([^}]*)}/g,function(a,f){return Function("x","with(x)return "+f).call(c,d||b||{})})}},s=function(a,b){return b?{get:function(c){return a[c]&&b.parse(a[c])},set:function(c,d){a[c]=b.stringify(d)}}:{}}(this.localStorage||{},JSON),p=function(a,b,c,d){c=c||document;d=c[b="on"+b];a=c[b]=function(e){d=d&&d(e=e||c.event);return(a=a&&b(e))?b:d};c=this},m=function(a,b,c){b=document;c=b.createElement("p");c.innerHTML=a;for(a=b.createDocumentFragment();b= +c.firstChild;)a.appendChild(b);return a},$=function(a,b){a=a.match(/^(\W)?(.*)/);return(b||document)["getElement"+(a[1]?a[1]=="#"?"ById":"sByClassName":"sByTagName")](a[2])},j=function(a){for(a=0;a<4;a++)try{return a?new ActiveXObject([,"Msxml2","Msxml3","Microsoft"][a]+".XMLHTTP"):new XMLHttpRequest}catch(b){}}; diff --git a/examples/esphttpd/html/flash/index.html b/examples/esphttpd/html/flash/index.html new file mode 100644 index 0000000..d336a6c --- /dev/null +++ b/examples/esphttpd/html/flash/index.html @@ -0,0 +1,75 @@ +<html> +<head><title>Upgrade firmware</title> +<link rel="stylesheet" type="text/css" href="style.css"> +<script type="text/javascript" src="140medley.min.js"></script> +<script type="text/javascript"> + +var xhr=j(); + +function doReboot() { + xhr.open("GET", "reboot"); + xhr.onreadystatechange=function() { + if (xhr.readyState==4 && xhr.status>=200 && xhr.status<300) { + window.setTimeout(function() { + location.reload(true); + }, 3000); + } + } + //ToDo: set timer to + xhr.send(); +} + +function setProgress(amt) { + $("#progressbarinner").style.width=String(amt*200)+"px"; +} + +function doUpgrade() { + var f=$("#file").files[0]; + if (typeof f=='undefined') { + $("#remark").innerHTML="Can't read file!"; + return + } + xhr.open("POST", "upload"); + xhr.onreadystatechange=function() { + if (xhr.readyState==4 && xhr.status>=200 && xhr.status<300) { + setProgress(1); + if (xhr.responseText!="") { + $("#remark").innerHTML="Error: "+xhr.responseText; + } else { + $("#remark").innerHTML="Uploading done. Rebooting."; + doReboot(); + } + } + } + if (typeof xhr.upload.onprogress != 'undefined') { + xhr.upload.onprogress=function(e) { + setProgress(e.loaded / e.total); + } + } + xhr.send(f); + return false; +} + + +window.onload=function(e) { + xhr.open("GET", "next"); + xhr.onreadystatechange=function() { + if (xhr.readyState==4 && xhr.status>=200 && xhr.status<300) { + var txt="Please upload "+xhr.responseText+" or ota file."; + $("#remark").innerHTML=txt; + setProgress(0); + } + } + xhr.send(); +} + +</script> +</head> +<body> +<div id="main"> +<h1>Update firmware</h1> +<div id="remark">Loading...</div> +<input type="file" id="file" /> +<input type="submit" value="Upgrade!" onclick="doUpgrade()" /> +<div id="progressbar"><div id="progressbarinner"></div></div> +</body> \ No newline at end of file diff --git a/examples/esphttpd/html/flash/style.css b/examples/esphttpd/html/flash/style.css new file mode 100644 index 0000000..7678ec8 --- /dev/null +++ b/examples/esphttpd/html/flash/style.css @@ -0,0 +1,34 @@ + +body { + background-color: #404040; + font-family: sans-serif; +} + +#main { + background-color: #d0d0FF; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + border: 2px solid #000000; + width: 800px; + margin: 0 auto; + padding: 20px +} + +#progressbar { + margin: 10px; + padding: 0; + border: 1px solid #000000; + height: 20px; + width: 200px; + background-color: #808080; +} + +#progressbarinner { + width: 10px; + height: 20px; + border: none; + background-color: #00ff00; +} + + diff --git a/examples/esphttpd/html/index.tpl b/examples/esphttpd/html/index.tpl new file mode 100644 index 0000000..737f301 --- /dev/null +++ b/examples/esphttpd/html/index.tpl @@ -0,0 +1,26 @@ +<html> +<head><title>Esp8266 web server</title> +<link rel="stylesheet" type="text/css" href="style.css"> +</head> +<body> +<div id="main"> +<h1>It Works</h1> +<p> +If you see this, it means the tiny li'l website in your ESP8266 does actually work. Fyi, this page has +been loaded <b>%counter%</b> times. +<ul> +<li>If you haven't connected this device to your WLAN network now, you can <a href="/wifi">do so.</a></li> +<li>You can also control the <a href="led.tpl">LED</a>.</li> +<li>Esphttpd now also supports <a href="websocket/index.html">websockets</a>.</li> +<li>Test esphttpd using the built-in <a href="test/">test suite</a></li> +<li>And because I can, here's a link to my <a href="http://spritesmods.com/?f=esphttpd">website</a></ul> +</ul> +</p> + +<p>And because we're on the Internets now, here are the required pictures of cats:<br /> +<img src="cats/cross-eyed-cat.jpg"><br /> +<img src="cats/junge-katze-iv.jpg"><br /> +<img src="cats/kitten-loves-toy.jpg"><br /> +</p> +</div> +</body></html> diff --git a/examples/esphttpd/html/led.tpl b/examples/esphttpd/html/led.tpl new file mode 100644 index 0000000..7a9cf89 --- /dev/null +++ b/examples/esphttpd/html/led.tpl @@ -0,0 +1,15 @@ +<html><head><title>Test</title> +<link rel="stylesheet" type="text/css" href="style.css"> +</head> +<body> +<div id="main"> +<h1>The LED</h1> +<p> +If there's a LED connected to GPIO2, it's now %ledstate%. You can change that using the buttons below. +</p> +<form method="post" action="led.cgi"> +<input type="submit" name="led" value="1"> +<input type="submit" name="led" value="0"> +</form> +</div> +</body></html> diff --git a/examples/esphttpd/html/style.css b/examples/esphttpd/html/style.css new file mode 100644 index 0000000..2a2f758 --- /dev/null +++ b/examples/esphttpd/html/style.css @@ -0,0 +1,17 @@ + +body { + background-color: #404040; + font-family: sans-serif; +} + +#main { + background-color: #d0d0FF; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + border: 2px solid #000000; + width: 800px; + margin: 0 auto; + padding: 20px +} + diff --git a/examples/esphttpd/html/test/index.html b/examples/esphttpd/html/test/index.html new file mode 100644 index 0000000..01f4121 --- /dev/null +++ b/examples/esphttpd/html/test/index.html @@ -0,0 +1,9 @@ +<html><head><title>Webserver test</title></head> +<link rel="stylesheet" type="text/css" href="../wifi/style.css"> +<script type="text/javascript" src="../wifi/140medley.min.js"></script> +<script type="text/javascript" src="test.js"></script> +<body> +<div id="main"> +<div id="log">Initializing test...</div> +</div> +</body> \ No newline at end of file diff --git a/examples/esphttpd/html/test/test.js b/examples/esphttpd/html/test/test.js new file mode 100644 index 0000000..03c0cd4 --- /dev/null +++ b/examples/esphttpd/html/test/test.js @@ -0,0 +1,205 @@ + +/* +Code to test the webserver. This depends on: +- The cat images being available, for concurrent espfs testing +- the test.cgi script available, for generic data mangling tests + + +This test does a max of 4 requests in parallel. The nonos SDK supports a max of +5 connections; the default libesphttpd setting is 4 sockets at a time. Unfortunately, +the nonos sdk just closes all sockets opened after the available sockets are opened, +instead of queueing them until a socket frees up. +*/ + + +function log(line) { + $("#log").insertAdjacentHTML('beforeend', line+'<br />'); +} + + +//Load an image multiple times in parallel +function testParLdImg(url, ct, doneFn) { + var im=[]; + var state={"loaded":0, "count":ct, "doneFn": doneFn, "error":false}; + for (var x=0; x<ct; x++) { + im[x]=new Image(); + im[x].onload=function(no) { + log("File "+no+" loaded successfully."); + this.loaded++; + if (this.loaded==this.count) this.doneFn(!this.error); + }.bind(state, x); + im[x].onerror=function(no) { + log("Error loading image "+no+"!"); + this.loaded++; + this.error++; + if (this.loaded==this.count) this.doneFn(!this.error); + }.bind(state, x); + im[x].src=url+"?"+Math.floor(Math.random()*100000).toString(); + } +} + +function testDownloadCgi(len, doneFn) { + var xhr=j(); + var state={"len":len, "doneFn":doneFn, "ts": Date.now()}; + xhr.open("GET", "test.cgi?len="+len+"&nocache="+Math.floor(Math.random()*100000).toString()); + xhr.onreadystatechange=function() { + if (xhr.readyState==4 && xhr.status>=200 && xhr.status<300) { + if (xhr.response.length==this.len) { + log("Downloaded "+this.len+" bytes successfully."); + this.doneFn(true); + } else { + log("Downloaded "+xhr.response.length+" bytes successfully, but needed "+this.len+"!"); + this.doneFn(false); + } + } else if (xhr.readyState==4) { + log("Failed! Error "+xhr.status); + this.doneFn(false); + } + }.bind(state); + //If the webbrowser enables it, show progress. + if (typeof xhr.onprogress != 'undefined') { + xhr.onprogress=function(e) { + if (Date.now()>this.ts+2000) { + log("..."+Math.floor(e.loaded*100/this.len).toString()+"%"); + this.ts=Date.now(); + } + }.bind(state); + } + xhr.send(); +} + + +function testUploadCgi(len, doneFn) { + var xhr=j(); + var state={"len":len, "doneFn":doneFn, "ts": Date.now()}; + var data=""; + for (var x=0; x<len; x++) data+="X"; + xhr.open("POST", "test.cgi"); + xhr.onreadystatechange=function() { + if (xhr.readyState==4 && xhr.status>=200 && xhr.status<300) { + var ulen=parseInt(xhr.responseText); + if (ulen==this.len) { + log("Uploaded "+this.len+" bytes successfully."); + this.doneFn(true); + } else { + log("Webserver received "+ulen+" bytes successfully, but sent "+this.len+"!"); + this.doneFn(false); + } + } else if (xhr.readyState==4) { + log("Failed! Error "+xhr.status); + this.doneFn(false); + } + }.bind(state); + //If the webbrowser enables it, show progress. + if (typeof xhr.upload.onprogress != 'undefined') { + xhr.upload.onprogress=function(e) { + if (Date.now()>this.ts+2000) { + log("..."+Math.floor(e.loaded*100/e.total).toString()+"%"); + this.ts=Date.now(); + } + }.bind(state); + } + //Upload the file + xhr.send(data); +} + +function hammerNext(state, xhr) { + if (state.done==state.count) { + state.doneFn(!state.error); + } + if (state.started==state.count) return; + xhr.open("GET", "test.cgi?len="+state.len+"&nocache="+Math.floor(Math.random()*100000).toString()); + xhr.onreadystatechange=function(xhr) { + if (xhr.readyState==4 && xhr.status>=200 && xhr.status<300) { + if (xhr.response.length==this.len) { + state.done++; + hammerNext(this, xhr); + } else { + log("Downloaded "+xhr.response.length+" bytes successfully, but needed "+this.len+"!"); + state.done++; + hammerNext(this, xhr); + } + } else if (xhr.readyState==4) { + log("Failed! Error "+xhr.status); + state.done++; + hammerNext(this, xhr); + } + }.bind(state, xhr); + //If the webbrowser enables it, show progress. + if (typeof xhr.onprogress != 'undefined') { + xhr.onprogress=function(e) { + if (Date.now()>this.ts+2000) { + log("..."+state.done+"/"+state.count); + this.ts=Date.now(); + } + }.bind(state); + } + state.started++; + xhr.send(); +} + +function testHammer(count, par, len, doneFn) { + var state={"count":count, "started":0, "done":0, "par":par, "len":len, "doneFn":doneFn, "ts": Date.now(), "error":false}; + var xhr=[]; + for (var i=0; i<par; i++) { + xhr[i]=j(); + hammerNext(state, xhr[i]); + } +} + + + +var tstState=0; +var successCnt=0; + +function nextTest(lastOk) { + if (tstState!=0) { + if (lastOk) { + log("<b>Success!</b>"); + successCnt++; + } else { + log("<b>Test failed!</b>"); + } + } + tstState++; + if (tstState==1) { + log("Testing parallel load of espfs files..."); + testParLdImg("../cats/kitten-loves-toy.jpg", 3, nextTest); + } else if (tstState==2) { + log("Testing GET request of 32K..."); + testDownloadCgi(32*1024, nextTest); + } else if (tstState==3) { + log("Testing GET request of 128K..."); + testDownloadCgi(128*1024, nextTest); + } else if (tstState==4) { + log("Testing GET request of 512K..."); + testDownloadCgi(512*1024, nextTest); + } else if (tstState==5) { + log("Testing POST request of 512 bytes..."); + testUploadCgi(512, nextTest); + } else if (tstState==6) { + log("Testing POST request of 16K bytes..."); + testUploadCgi(16*1024, nextTest); + } else if (tstState==7) { + log("Testing POST request of 512K bytes..."); + testUploadCgi(512*1024, nextTest); + } else if (tstState==8) { + log("Hammering webserver with 500 requests of size 512..."); + testHammer(500, 3, 512, nextTest); + } else if (tstState==9) { + log("Hammering webserver with 500 requests of size 2048..."); + testHammer(500, 3, 2048, nextTest); + } else { + log("Tests done! "+successCnt+" out of "+(tstState-1)+" tests were successful."); + } +} + + + +window.onload=function(e) { + log("Starting tests."); + nextTest(false); +} + + + diff --git a/examples/esphttpd/html/websocket/index.html b/examples/esphttpd/html/websocket/index.html new file mode 100644 index 0000000..d7423ec --- /dev/null +++ b/examples/esphttpd/html/websocket/index.html @@ -0,0 +1,69 @@ +<!DOCTYPE html> + +<meta charset="utf-8" /> + +<title>WebSocket Test</title> + +<script language="javascript" type="text/javascript"> + + var wsUri = "ws://"+window.location.host+"/websocket/ws.cgi"; + var output; + + function init() + { + output = document.getElementById("output"); + testWebSocket(); + } + + function testWebSocket() + { + websocket = new WebSocket(wsUri); + websocket.onopen = function(evt) { onOpen(evt) }; + websocket.onclose = function(evt) { onClose(evt) }; + websocket.onmessage = function(evt) { onMessage(evt) }; + websocket.onerror = function(evt) { onError(evt) }; + } + + function onOpen(evt) + { + writeToScreen("CONNECTED"); + doSend("WebSocket rocks"); + } + + function onClose(evt) + { + writeToScreen("DISCONNECTED"); + } + + function onMessage(evt) + { + writeToScreen('<span style="color: blue;">RECEIVED: ' + evt.data+'</span>'); +// websocket.close(); + } + + function onError(evt) + { + writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data); + } + + function doSend(message) + { + writeToScreen("SENT: " + message); + websocket.send(message); + } + + function writeToScreen(message) + { + var pre = document.createElement("p"); + pre.style.wordWrap = "break-word"; + pre.innerHTML = message; + output.appendChild(pre); + } + + window.addEventListener("load", init, false); + +</script> + +<h2>WebSocket Test</h2> + +<div id="output"></div> diff --git a/examples/esphttpd/html/wifi/140medley.min.js b/examples/esphttpd/html/wifi/140medley.min.js new file mode 100644 index 0000000..d1495d1 --- /dev/null +++ b/examples/esphttpd/html/wifi/140medley.min.js @@ -0,0 +1,2 @@ +var t=function(a,b){return function(c,d){return a.replace(/#{([^}]*)}/g,function(a,f){return Function("x","with(x)return "+f).call(c,d||b||{})})}},s=function(a,b){return b?{get:function(c){return a[c]&&b.parse(a[c])},set:function(c,d){a[c]=b.stringify(d)}}:{}}(this.localStorage||{},JSON),p=function(a,b,c,d){c=c||document;d=c[b="on"+b];a=c[b]=function(e){d=d&&d(e=e||c.event);return(a=a&&b(e))?b:d};c=this},m=function(a,b,c){b=document;c=b.createElement("p");c.innerHTML=a;for(a=b.createDocumentFragment();b= +c.firstChild;)a.appendChild(b);return a},$=function(a,b){a=a.match(/^(\W)?(.*)/);return(b||document)["getElement"+(a[1]?a[1]=="#"?"ById":"sByClassName":"sByTagName")](a[2])},j=function(a){for(a=0;a<4;a++)try{return a?new ActiveXObject([,"Msxml2","Msxml3","Microsoft"][a]+".XMLHTTP"):new XMLHttpRequest}catch(b){}}; diff --git a/examples/esphttpd/html/wifi/connecting.html b/examples/esphttpd/html/wifi/connecting.html new file mode 100644 index 0000000..12e3a83 --- /dev/null +++ b/examples/esphttpd/html/wifi/connecting.html @@ -0,0 +1,43 @@ +<html><head><title>Connecting...</title> +<link rel="stylesheet" type="text/css" href="style.css"> +<script type="text/javascript" src="140medley.min.js"></script> +<script type="text/javascript"> + +var xhr=j(); + + +function getStatus() { + xhr.open("GET", "connstatus.cgi"); + xhr.onreadystatechange=function() { + if (xhr.readyState==4 && xhr.status>=200 && xhr.status<300) { + var data=JSON.parse(xhr.responseText); + if (data.status=="idle") { + $("#status").innerHTML="Preparing to connect..."; + window.setTimeout(getStatus, 1000); + } else if (data.status=="success") { + $("#status").innerHTML="Connected! Got IP "+data.ip+". If you're in the same network, you can access it <a href=\"http://"+data.ip+"/\">here</a>."; + } else if (data.status=="working") { + $("#status").innerHTML="Trying to connect to selected access point..."; + window.setTimeout(getStatus, 1000); + } else if (data.status=="fail") { + $("#status").innerHTML="Connection failed. Check password and selected AP.<br /><a href=\"wifi.tpl\">Go Back</a>"; + } + } + } + xhr.send(); +} + +window.onload=function(e) { + getStatus(); +}; +</script> +</head> +<body> +<div id="main"> +<h2>Connecting to AP...</h2> +<p>Status:<br /> +<div id="status">...</div> +</p> +</div> +</body> +</html> diff --git a/examples/esphttpd/html/wifi/icons.png b/examples/esphttpd/html/wifi/icons.png new file mode 100644 index 0000000000000000000000000000000000000000..03109e15a4c83edbec901d41b9e1598d151fcaf4 GIT binary patch literal 914 zcmV;D18w|?P)<h;3K|Lk000e1NJLTq002M$005u}1^@s6ye(>600006VoOIv0RI60 z0RN!9r;`8x010qNS#tmYE+YT{E+YYWr9XB6000McNliru-V6j3Di2DDcf0@q10P95 zK~#9!?VK@h(?Ar*pOJ@1NRWXcVn9mSQTY~(1&M{BOO`S+GqenyJHnDBLl>mNRH1$c z1Y$)>B&Hh}0ur-3R7o7$T+XS_x##=+q^hwmZsUL7`}^+RQ$+v(A|_G$$&b$L;~(BA z7vSV`_TMoxOJpz<%eb=$X`p}IY<Uw^42GGQSz;L%>-9PA1b6eV-ew!$V`euZ*vFlI zo%aYBjYg#pIv$VRQg1L6IXOty#JTsNIGz_z*2Y7K0Aq~I=kw*4GsT-15jj6i<nQmC zPaH^LT-L@_ra;R?FF+bZuDfu2ar6D>*VVbnwEVs=<MR07o__(1G1BYxmdE{mKduPa z3IF~?F2LRU?F-;N*UwLFKP!`GqxIt=>*E`z`>CQ_&u(#D(w!8jllKlOqT2&RL|#8# zy?+0#IS=rj>rLPM;<%;=Y1f|XOogKopcwAkc)+KRze>6O{N<x0mIz3%E{zNxu5$g! zexDRzIjq?Sh=8s~fa7*|_aflki=@@-003e@uS43(=f#p*=L9%9v+oa9)fGE46Lc+~ z+ajdRnV{FLwN2&o5F%jf@_5~w7b%y|SqvdSdmf--8{MY>TDQ^h06aibt{-1y@_2uB zJek@jJCkW9hkHq*5#a5)?sD_nut6ls<LZ;xS9x4T$;@YYJeHCf^8nSKp7MAD6Cuju zOof$0c|5iVpgi8vbpQYW-G>GVl{Zg=gu`^128lq{0yIbj4*LNra$SP}G)Uk9k$AvP z3n?BNBx(z=vqH*k8YC<tMBgBR2LzexE-acO@|B^gbK6G1)uoXi-{;G(pvZTIEM8Zg z<1yG(0rDZfcwKeQ#RF)Nph1Gips4qOEpnd-P#Xa>NVIev0000$*YQ3}3cY6NeJv1r z&5%7omctF9b#JjT0krNd;sJO-B)Q(009~si-~o6*B)MK&0RDjj9uSEK&>uj503Lt< z2!H?p0000G9p2adq3<_%?+*xlzk$V2>;ljq5KFF;0tnDh3eX=we*hj3hX>FfKz{%p o5QhiQA3%Qq9)JJ{fB^Aw4Q_yb2{`v!<NyEw07*qoM6N<$f}RwU!T<mO literal 0 HcmV?d00001 diff --git a/examples/esphttpd/html/wifi/style.css b/examples/esphttpd/html/wifi/style.css new file mode 100644 index 0000000..abcfb10 --- /dev/null +++ b/examples/esphttpd/html/wifi/style.css @@ -0,0 +1,24 @@ + +body { + background-color: #404040; + font-family: sans-serif; +} + +#main { + background-color: #d0d0FF; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + border: 2px solid #000000; + width: 800px; + margin: 0 auto; + padding: 20px +} + +.icon { + background-image: url("icons.png"); + background-color: transparent; + width: 32px; + height: 32px; + display: inline-block; +} \ No newline at end of file diff --git a/examples/esphttpd/html/wifi/wifi.tpl b/examples/esphttpd/html/wifi/wifi.tpl new file mode 100644 index 0000000..e513025 --- /dev/null +++ b/examples/esphttpd/html/wifi/wifi.tpl @@ -0,0 +1,94 @@ +<html><head><title>WiFi connection</title> +<link rel="stylesheet" type="text/css" href="style.css"> +<script type="text/javascript" src="140medley.min.js"></script> +<script type="text/javascript"> + +var xhr=j(); +var currAp="%currSsid%"; + +function createInputForAp(ap) { + if (ap.essid=="" && ap.rssi==0) return; + var div=document.createElement("div"); + div.id="apdiv"; + var rssi=document.createElement("div"); + var rssiVal=-Math.floor(ap.rssi/51)*32; + rssi.className="icon"; + rssi.style.backgroundPosition="0px "+rssiVal+"px"; + var encrypt=document.createElement("div"); + var encVal="-64"; //assume wpa/wpa2 + if (ap.enc=="0") encVal="0"; //open + if (ap.enc=="1") encVal="-32"; //wep + encrypt.className="icon"; + encrypt.style.backgroundPosition="-32px "+encVal+"px"; + var input=document.createElement("input"); + input.type="radio"; + input.name="essid"; + input.value=ap.essid; + if (currAp==ap.essid) input.checked="1"; + input.id="opt-"+ap.essid; + var label=document.createElement("label"); + label.htmlFor="opt-"+ap.essid; + label.textContent=ap.essid; + div.appendChild(input); + div.appendChild(rssi); + div.appendChild(encrypt); + div.appendChild(label); + return div; +} + +function getSelectedEssid() { + var e=document.forms.wifiform.elements; + for (var i=0; i<e.length; i++) { + if (e[i].type=="radio" && e[i].checked) return e[i].value; + } + return currAp; +} + + +function scanAPs() { + xhr.open("GET", "wifiscan.cgi"); + xhr.onreadystatechange=function() { + if (xhr.readyState==4 && xhr.status>=200 && xhr.status<300) { + var data=JSON.parse(xhr.responseText); + currAp=getSelectedEssid(); + if (data.result.inProgress=="0" && data.result.APs.length>1) { + $("#aps").innerHTML=""; + for (var i=0; i<data.result.APs.length; i++) { + if (data.result.APs[i].essid=="" && data.result.APs[i].rssi==0) continue; + $("#aps").appendChild(createInputForAp(data.result.APs[i])); + } + window.setTimeout(scanAPs, 20000); + } else { + window.setTimeout(scanAPs, 1000); + } + } + } + xhr.send(); +} + + +window.onload=function(e) { + scanAPs(); +}; +</script> +</head> +<body> +<div id="main"> +<p> +Current WiFi mode: %WiFiMode% +</p> +<p> +Note: %WiFiapwarn% +</p> +<form name="wifiform" action="connect.cgi" method="post"> +<p> +To connect to a WiFi network, please select one of the detected networks...<br> +<div id="aps">Scanning...</div> +<br> +WiFi password, if applicable: <br /> +<input type="text" name="passwd" val="%WiFiPasswd%"> <br /> +<input type="submit" name="connect" value="Connect!"> +</p> +</div> +</body> +</html> diff --git a/examples/esphttpd/io.c b/examples/esphttpd/io.c new file mode 100644 index 0000000..c104b9c --- /dev/null +++ b/examples/esphttpd/io.c @@ -0,0 +1,72 @@ + +/* + * ---------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * Jeroen Domburg <jeroen@spritesmods.com> wrote this file. As long as you retain + * this notice you can do whatever you want with this stuff. If we meet some day, + * and you think this stuff is worth it, you can buy me a beer in return. + * ---------------------------------------------------------------------------- + */ + + +#include <espressif/esp_common.h> +//#include <c_types.h> +#include <etstimer.h> +#include <espressif/esp_system.h> +#include <espressif/esp_timer.h> +#include <espressif/esp_wifi.h> +#include <espressif/esp_sta.h> +#include <espressif/esp_misc.h> +#include <espressif/osapi.h> + +#include <espressif/esp8266/eagle_soc.h> +#include <espressif/esp8266/gpio_register.h> +#include <espressif/esp8266/pin_mux_register.h> + +#define LEDGPIO 2 +#define BTNGPIO 0 + +#ifndef ESP32 +static ETSTimer resetBtntimer; +#endif + +void ioLed(int ena) { +#ifndef ESP32 + //gpio_output_set is overkill. ToDo: use better mactos + if (ena) { + sdk_gpio_output_set((1<<LEDGPIO), 0, (1<<LEDGPIO), 0); + } else { + sdk_gpio_output_set(0, (1<<LEDGPIO), (1<<LEDGPIO), 0); + } +#endif +} + +#ifndef ESP32 +static void resetBtnTimerCb(void *arg) { + static int resetCnt=0; + if ((GPIO_REG_READ(GPIO_IN_ADDRESS)&(1<<BTNGPIO))==0) { + resetCnt++; + } else { + if (resetCnt>=6) { //3 sec pressed + sdk_wifi_station_disconnect(); + sdk_wifi_set_opmode(STATIONAP_MODE); //reset to AP+STA mode + printf("Reset to AP mode. Restarting system...\n"); + sdk_system_restart(); + } + resetCnt=0; + } +} +#endif + + +void ioInit() { +#ifndef ESP32 + PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2); + PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0); + sdk_gpio_output_set(0, 0, (1<<LEDGPIO), (1<<BTNGPIO)); + sdk_os_timer_disarm(&resetBtntimer); + sdk_os_timer_setfn(&resetBtntimer, resetBtnTimerCb, NULL); + sdk_os_timer_arm(&resetBtntimer, 500, 1); +#endif +} + diff --git a/examples/esphttpd/io.h b/examples/esphttpd/io.h new file mode 100644 index 0000000..42af106 --- /dev/null +++ b/examples/esphttpd/io.h @@ -0,0 +1,7 @@ +#ifndef IO_H +#define IO_H + +void ICACHE_FLASH_ATTR ioLed(int ena); +void ioInit(void); + +#endif \ No newline at end of file diff --git a/examples/esphttpd/user_main.c b/examples/esphttpd/user_main.c new file mode 100644 index 0000000..94e4fd4 --- /dev/null +++ b/examples/esphttpd/user_main.c @@ -0,0 +1,210 @@ +/* + * ---------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * Jeroen Domburg <jeroen@spritesmods.com> wrote this file. As long as you retain + * this notice you can do whatever you want with this stuff. If we meet some day, + * and you think this stuff is worth it, you can buy me a beer in return. + * ---------------------------------------------------------------------------- + */ + +/* +This is example code for the esphttpd library. It's a small-ish demo showing off +the server, including WiFi connection management capabilities, some IO and +some pictures of cats. +*/ + +#include <string.h> +#include <stdio.h> + +#include <espressif/esp_common.h> +#include <etstimer.h> +#include <libesphttpd/httpd.h> +#include <libesphttpd/httpdespfs.h> +#include <libesphttpd/cgiwifi.h> +#include <libesphttpd/cgiflash.h> +#include <libesphttpd/auth.h> +#include <libesphttpd/espfs.h> +#include <libesphttpd/captdns.h> +#include <libesphttpd/webpages-espfs.h> +#include <libesphttpd/cgiwebsocket.h> +#include <dhcpserver.h> + +#include <FreeRTOS.h> +#include <task.h> +#include <semphr.h> +#include <queue.h> +#include <esp/uart.h> + +#include "io.h" +#include "cgi.h" +#include "cgi-test.h" + +#define AP_SSID "esp-open-rtos AP" +#define AP_PSK "esp-open-rtos" + +//Function that tells the authentication system what users/passwords live on the system. +//This is disabled in the default build; if you want to try it, enable the authBasic line in +//the builtInUrls below. +int myPassFn(HttpdConnData *connData, int no, char *user, int userLen, char *pass, int passLen) { + if (no==0) { + strcpy(user, "admin"); + strcpy(pass, "s3cr3t"); + return 1; +//Add more users this way. Check against incrementing no for each user added. +// } else if (no==1) { +// strcpy(user, "user1"); +// strcpy(pass, "something"); +// return 1; + } + return 0; +} + + +static ETSTimer websockTimer; + +//Broadcast the uptime in seconds every second over connected websockets +static void websocketBcast(void *arg) { + static int ctr=0; + char buff[128]; + while(1) { + ctr++; + sprintf(buff, "Up for %d minutes %d seconds!\n", ctr/60, ctr%60); + cgiWebsockBroadcast("/websocket/ws.cgi", buff, strlen(buff), WEBSOCK_FLAG_NONE); + vTaskDelay(1000/portTICK_PERIOD_MS); + } +} + +//On reception of a message, send "You sent: " plus whatever the other side sent +static void myWebsocketRecv(Websock *ws, char *data, int len, int flags) { + int i; + char buff[128]; + sprintf(buff, "You sent: "); + for (i=0; i<len; i++) buff[i+10]=data[i]; + buff[i+10]=0; + cgiWebsocketSend(ws, buff, strlen(buff), WEBSOCK_FLAG_NONE); +} + +//Websocket connected. Install reception handler and send welcome message. +static void myWebsocketConnect(Websock *ws) { + ws->recvCb=myWebsocketRecv; + cgiWebsocketSend(ws, "Hi, Websocket!", 14, WEBSOCK_FLAG_NONE); +} + +//On reception of a message, echo it back verbatim +void myEchoWebsocketRecv(Websock *ws, char *data, int len, int flags) { + printf("EchoWs: echo, len=%d\n", len); + cgiWebsocketSend(ws, data, len, flags); +} + +//Echo websocket connected. Install reception handler. +void myEchoWebsocketConnect(Websock *ws) { + printf("EchoWs: connect\n"); + ws->recvCb=myEchoWebsocketRecv; +} + +CgiUploadFlashDef uploadParams={ + .type=CGIFLASH_TYPE_FW, + .fw1Pos=0x2000, + .fw2Pos=((FLASH_SIZE*1024*1024)/2)+0x2000, + .fwSize=((FLASH_SIZE*1024*1024)/2)-0x2000, + .tagName=LIBESPHTTPD_OTA_TAGNAME +}; + + +/* +This is the main url->function dispatching data struct. +In short, it's a struct with various URLs plus their handlers. The handlers can +be 'standard' CGI functions you wrote, or 'special' CGIs requiring an argument. +They can also be auth-functions. An asterisk will match any url starting with +everything before the asterisks; "*" matches everything. The list will be +handled top-down, so make sure to put more specific rules above the more +general ones. Authorization things (like authBasic) act as a 'barrier' and +should be placed above the URLs they protect. +*/ +HttpdBuiltInUrl builtInUrls[]={ + {"*", cgiRedirectApClientToHostname, "esp8266.nonet"}, + {"/", cgiRedirect, "/index.tpl"}, + {"/led.tpl", cgiEspFsTemplate, tplLed}, + {"/index.tpl", cgiEspFsTemplate, tplCounter}, + {"/led.cgi", cgiLed, NULL}, +#ifndef ESP32 + {"/flash/", cgiRedirect, "/flash/index.html"}, + {"/flash/next", cgiGetFirmwareNext, &uploadParams}, + {"/flash/upload", cgiUploadFirmware, &uploadParams}, + {"/flash/reboot", cgiRebootFirmware, NULL}, +#endif + //Routines to make the /wifi URL and everything beneath it work. + +//Enable the line below to protect the WiFi configuration with an username/password combo. +// {"/wifi/*", authBasic, myPassFn}, + + {"/wifi", cgiRedirect, "/wifi/wifi.tpl"}, + {"/wifi/", cgiRedirect, "/wifi/wifi.tpl"}, + {"/wifi/wifiscan.cgi", cgiWiFiScan, NULL}, + {"/wifi/wifi.tpl", cgiEspFsTemplate, tplWlan}, + {"/wifi/connect.cgi", cgiWiFiConnect, NULL}, + {"/wifi/connstatus.cgi", cgiWiFiConnStatus, NULL}, + {"/wifi/setmode.cgi", cgiWiFiSetMode, NULL}, + + {"/websocket/ws.cgi", cgiWebsocket, myWebsocketConnect}, + {"/websocket/echo.cgi", cgiWebsocket, myEchoWebsocketConnect}, + + {"/test", cgiRedirect, "/test/index.html"}, + {"/test/", cgiRedirect, "/test/index.html"}, + {"/test/test.cgi", cgiTestbed, NULL}, + + {"*", cgiEspFsHook, NULL}, //Catch-all cgi function for the filesystem + {NULL, NULL, NULL} +}; + +void wifiInit() { + struct ip_info ap_ip; + uint8_t sdk_wifi_get_opmode(); + switch(sdk_wifi_get_opmode()) { + case STATIONAP_MODE: + case SOFTAP_MODE: + IP4_ADDR(&ap_ip.ip, 172, 16, 0, 1); + IP4_ADDR(&ap_ip.gw, 0, 0, 0, 0); + IP4_ADDR(&ap_ip.netmask, 255, 255, 0, 0); + sdk_wifi_set_ip_info(1, &ap_ip); + + struct sdk_softap_config ap_config = { + .ssid = AP_SSID, + .ssid_hidden = 0, + .channel = 3, + .ssid_len = strlen(AP_SSID), + .authmode = AUTH_WPA_WPA2_PSK, + .password = AP_PSK, + .max_connection = 3, + .beacon_interval = 100, + }; + sdk_wifi_softap_set_config(&ap_config); + + ip_addr_t first_client_ip; + IP4_ADDR(&first_client_ip, 172, 16, 0, 2); + dhcpserver_start(&first_client_ip, 4); + dhcpserver_set_dns(&ap_ip.ip); + dhcpserver_set_router(&ap_ip.ip); + break; + case STATION_MODE: + break; + default: + break; + } +} + +//Main routine. Initialize stdout, the I/O, filesystem and the webserver and we're done. +void user_init(void) { + uart_set_baud(0, 115200); + + wifiInit(); + ioInit(); + captdnsInit(); + + espFsInit((void*)(_binary_build_web_espfs_bin_start)); + httpdInit(builtInUrls, 80); + + xTaskCreate(websocketBcast, "wsbcast", 300, NULL, 3, NULL); + + printf("\nReady\n"); +} diff --git a/extras/libesphttpd/component.mk b/extras/libesphttpd/component.mk new file mode 100644 index 0000000..22e433e --- /dev/null +++ b/extras/libesphttpd/component.mk @@ -0,0 +1,64 @@ +# Component makefile for extras/libesphttpd + +INC_DIRS += $(libesphttpd_ROOT)/libesphttpd/include $(libesphttpd_ROOT)/libesphttpd/espfs $(libesphttpd_ROOT)/libesphttpd/lib/heatshrink + +LIBESPHTTPD_MAX_CONNECTIONS ?= 4 +LIBESPHTTPD_STACKSIZE ?= 2048 +LIBESPHTTPD_OTA_TAGNAME ?= generic + +RBOOT_OTA ?= 1 +ESP_IP ?= 192.168.4.1 + +# args for passing into compile rule generation +libesphttpd_SRC_DIR = $(libesphttpd_ROOT)/libesphttpd/core $(libesphttpd_ROOT)/libesphttpd/espfs $(libesphttpd_ROOT)/libesphttpd/util +libesphttpd_CFLAGS += -DFREERTOS -DUSE_OPEN_SDK -DHTTPD_MAX_CONNECTIONS=$(LIBESPHTTPD_MAX_CONNECTIONS) -DHTTPD_STACKSIZE=$(LIBESPHTTPD_STACKSIZE) -DESPFS_HEATSHRINK -D__ets__ -DRBOOT_OTA=1 -std=gnu99 + +$(eval $(call component_compile_rules,libesphttpd)) + +rwildcard = $(wildcard $1$2) $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2)) + +LIBESPHTTPD_MKESPFSIMAGE_DIR = $(BUILD_DIR)mkespfsimage + +LIBESPHTTPD_MKESPFS = $(LIBESPHTTPD_MKESPFSIMAGE_DIR)/mkespfsimage +LIBESPHTTPD_HTML_DIR = html +LIBESPHTTPD_HTML_FILES = $(call rwildcard,$(LIBESPHTTPD_HTML_DIR),*) +LIBESPHTTPD_HTML_TINY_DIR = $(BUILD_DIR)html +LIBESPHTTPD_HTML_ESPFS = $(BUILD_DIR)web.espfs.bin +LIBESPHTTPD_HTML_ESPFS_PATH = $(PROGRAM_REAL_ROOT)/$(LIBESPHTTPD_HTML_ESPFS) +LIBESPHTTPD_HTML_ESPFS_OBJ = $(BUILD_DIR)web.espfs.o + +CROSS_BINARY_ARCH ?= xtensa +CROSS_OUTPUT_TARGET ?= elf32-xtensa-le + +LIBESPHTTPD_HTML_TINY ?= no + +CURL = curl +LIBESPHTTPD_CURL_OPTS = --connect-timeout 3 --max-time 60 -s + +$(LIBESPHTTPD_MKESPFSIMAGE_DIR): + $(Q)mkdir -p $(LIBESPHTTPD_MKESPFSIMAGE_DIR) + +$(PROGRAM_REAL_ROOT)/$(LIBESPHTTPD_MKESPFS): $(LIBESPHTTPD_MKESPFSIMAGE_DIR) + make -C $(libesphttpd_ROOT)/libesphttpd/espfs/mkespfsimage CC=gcc GZIP_COMPRESSION=yes USE_HEATSHRINK=yes BUILD_DIR=$(PROGRAM_REAL_ROOT)/$(BUILD_DIR) + +$(LIBESPHTTPD_HTML_ESPFS): $(PROGRAM_REAL_ROOT)/$(LIBESPHTTPD_MKESPFS) $(LIBESPHTTPD_HTML_FILES) + cd $(LIBESPHTTPD_HTML_DIR) && find . | $< > $(LIBESPHTTPD_HTML_ESPFS_PATH) || rm -f $(LIBESPHTTPD_HTML_ESPFS_PATH) + +$(LIBESPHTTPD_HTML_ESPFS_OBJ): $(LIBESPHTTPD_HTML_ESPFS) + $(Q)$(OBJCOPY) -I binary -O $(CROSS_OUTPUT_TARGET) -B $(CROSS_BINARY_ARCH) --rename-section .data=.irom.espfs $^ $@ + +$(BUILD_DIR)libesphttpd.a: $(LIBESPHTTPD_HTML_ESPFS_OBJ) + +htmlfs: $(LIBESPHTTPD_HTML_ESPFS_OBJ) + +$(libesphttpd_ROOT)/libesphttpd/mkupgimg/mkupgimg: + make -C $(libesphttpd_ROOT)/libesphttpd/mkupgimg CC=gcc RBOOT_OTA=$(RBOOT_OTA) + +$(FIRMWARE_DIR)ota_$(PROGRAM).bin: $(FW_FILE) $(libesphttpd_ROOT)/libesphttpd/mkupgimg/mkupgimg + $(libesphttpd_ROOT)/libesphttpd/mkupgimg/mkupgimg $(FW_FILE) "$(LIBESPHTTPD_OTA_TAGNAME)" $(FIRMWARE_DIR)ota_$(PROGRAM).bin + +ota: $(FIRMWARE_DIR)ota_$(PROGRAM).bin $(libesphttpd_ROOT)/libesphttpd/mkupgimg/mkupgimg + +webflash: $(FIRMWARE_DIR)ota_$(PROGRAM).bin + $(CURL) $(LIBESPHTTPD_CURL_OPTS) --data-binary "@$(FIRMWARE_DIR)ota_$(PROGRAM).bin" http://$(ESP_IP)/flash/upload && $(CURL) $(LIBESPHTTPD_CURL_OPTS) http://$(ESP_IP)/flash/reboot + diff --git a/extras/libesphttpd/libesphttpd b/extras/libesphttpd/libesphttpd new file mode 160000 index 0000000..c329aee --- /dev/null +++ b/extras/libesphttpd/libesphttpd @@ -0,0 +1 @@ +Subproject commit c329aeef0469a40152e1630dbd0f0b34bcebd4d5